午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

【VBA初學(xué)者教程】- 第一章 VBA入門知識(shí):使用Excel對(duì)象的事件

 L羅樂 2017-09-15


        上一期VBA入門知識(shí)為大家介紹的是如何在Visual Basic中使用Excel工作表函數(shù),各位小伙伴都學(xué)會(huì)了嗎?剛好前兩天SUT學(xué)習(xí)交流群中有位小伙伴咨詢了一個(gè)問題,該問題的解決方法也有小伙伴解決了,截圖如下:



        東陽這位小伙伴給出的代碼如下:


Dim old_v As Long

'當(dāng)用戶更改工作表中的單元格,或外部鏈接引起單元格的更改時(shí)觸發(fā)此事件

Private Sub Worksheet_Change(ByVal Target As Range)

    With Target

        If .Address = '$A$1' Then

            Application.EnableEvents = False

            .Value = old_v .Value

            old_v = .Value

            Application.EnableEvents = True

        End If

    End With

End Sub

'當(dāng)工作表上的選定區(qū)域發(fā)生改變時(shí),將觸發(fā)本事件

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    With Target

        If .Address = '$A$1' Then

            old_v = .Value

        ElseIf .Address = '$A$2' Then

            .Offset(-1).Select

        End If

    End With

End Sub

' 當(dāng)用鼠標(biāo)右鍵單擊某工作表時(shí)觸發(fā)此事件,此事件先于默認(rèn)的右鍵單擊操作

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

    With Target

        If .Address = '$A$1' Then

            old_v = 0

            .ClearContents

            Cancel = True

        End If

    End With

End Sub


        代碼演示如下,詳見如下動(dòng)態(tài)圖(右鍵鼠標(biāo)可以清空單元格內(nèi)容):



        上面的一段代碼就用到了幾個(gè)常用的事件,其實(shí)還有其他更多的事件。事件大體可以分為兩類,一類是工作簿事件,另一類是工作表事件。

        工作簿事件:當(dāng)工作簿更改、工作簿中的任何工作表更改、加載宏更改或數(shù)據(jù)透視表更改時(shí),將引發(fā)工作簿事件。工作簿上的事件在默認(rèn)情況下是可用的。工作簿對(duì)象事件一覽表如下圖所示:



        工作表事件:當(dāng)工作表激活、工作表中的任何單元格更改、數(shù)據(jù)透視表更改時(shí),將引發(fā)工作表事件。工作表上的事件在默認(rèn)情況下是可用的。工作表對(duì)象事件一覽表如下圖所示:



        這么多事件,難道都需要記住每個(gè)事件的名稱和用法嗎?當(dāng)然不用,名稱和參數(shù)都可以使用Excel的VBE自動(dòng)生成,具體操作如下:



        工作表、圖表工作表和工作簿事件處理過程對(duì)任意打開的工作表或工作簿都有效。如果要為嵌入式圖表、查詢表或 Application 對(duì)象編寫事件處理過程,則必須在類模塊中用 WithEvents 關(guān)鍵字創(chuàng)建新的對(duì)象。

        可用 EnableEvents 屬性激活或禁用事件。例如,使用 Save 方法保存工作表時(shí),將引發(fā) BeforeSave 事件??稍谡{(diào)用 Save 方法之前將 EnableEvents 屬性設(shè)置為False,以防止該事件的引發(fā)。具體代碼如下:


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    MsgBox '即將保存工作簿~'

End Sub


'禁止BeforeSave事件觸發(fā)

Sub sutTest()

    Application.EnableEvents = False

    ThisWorkbook.Save

    Application.EnableEvents = True

End Sub


        代碼演示如下動(dòng)態(tài)圖所示:



        還記得文章開頭那位小伙伴寫的代碼里面就用到了這個(gè) EnableEvents 屬性來禁用工作表Change事件。等單元格值從新計(jì)算后,再啟用該事件。如果不這么做,更改完單元格A1的值后,代碼將進(jìn)入死循環(huán),表現(xiàn)出來的就是你的Excel工作簿處于假死狀態(tài)~感興趣的可以試試,測試之前請(qǐng)保存好Excel文檔?。?!


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多