點擊鼠標,利用VBA代碼實現精準控制觸發事件的第二方案

鼠標 VBA專家 2019-04-21

大家好,我們今日繼續講解VBA代碼解決方案的第115講內容:工作表事件中,根據Target參數不同,實現精準控制觸發事件的VBA代碼第二方案。在上一講中我們講了利用Address的屬性實現控制觸發事件的方案,今日講解第二方案,就是利用Column屬性和Row屬性的方法,哪種方法好呢?這就要靠寫代碼人員的偏好了,有的人喜歡第一種,有的人喜歡第二種,我自己偏好第二種,就是今天講的這種了。

使用單元格的Column屬性和Row屬性可以將觸發條件限制在某一區域內,下面有一個程序供大家參考。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Columns("B:B").ClearContents

If Target.Column = 1 And Target.Row < 80 Then

Target.Offset(0, 1) = Val(Target)

End If

End Sub

代碼窗口:

點擊鼠標,利用VBA代碼實現精準控制觸發事件的第二方案

代碼解析:當點擊工作表的A1到A80單元格時,將在對應的B列顯示A列的數值。

第3行代碼使用Column屬性將觸發條件限制在第1列,使用Row屬性將觸發條件限制在第80行以內,也就是A1到A80的區域範圍內。

運行,我們在工作表中A列和C列事先錄入同樣的數字,並把列的字體設置為白色隱藏,點擊A列就會在B列出現A列的數字,類似於遊戲效果。

點擊鼠標,利用VBA代碼實現精準控制觸發事件的第二方案

二 為了實現根據單元格選中範圍精準的控制選擇觸發事件,我們需要對代碼進一步優化。例如:當我們選中的是兩個或兩個以上連續單元格,而且是在一列時才能執行後續的代碼(可以為兩個連續個單格,也可以是多個連續單元格,但必須是為同一列),其它情況時則 Exit Sub 跳出過程,該如何寫代碼呢?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count > 1 Then

If Target(1).Resize(Target.Count).Address = Target.Address Then

MsgBox "可以執行你的以下代碼"

Else

Exit Sub

End If

End If

End Sub

代碼窗口:

點擊鼠標,利用VBA代碼實現精準控制觸發事件的第二方案

代碼解析: Target(1).Resize(Target.Count).Address 為以Target(1)擴展後的區域;如果和 Target.Address 一樣就可以說明是一列的連續區域了。

備考:利用Resize屬性對單元格進行擴張時,是以原單元格為起始點但包括原單元格本身的擴張。Resize屬性的語法為:

Range對象.Resize(RowSize,ColumnSize)擴展特定的單元格,返回一個由參數RowSize和ColumnSize指定行列數的單元格區域。

其中:參數RowSize指定新單元格區域的行數。若省略該參數,則新單元格區域的行數與原來相同。Range('A1').Resize(1, 3).Select等價於代碼(省略了第一個參數):Range('A1').Resize(, 3).Select都將選擇單元格區域A1:C1。

參數ColumnSize指定新單元格區域的列數。若省略該參數,則新單元格區域的列數與原來相同。

運行:

點擊鼠標,利用VBA代碼實現精準控制觸發事件的第二方案

今日內容迴向:

1 如何利用Column屬性和Row屬性實現精準的觸發事件?

2 如何判斷連續的單元格在整行或整列呢?

相關推薦

推薦中...