點擊鼠標,利用VBA代碼實現精準控制觸發事件的第二方案
大家好,我們今日繼續講解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
代碼窗口:
代碼解析:當點擊工作表的A1到A80單元格時,將在對應的B列顯示A列的數值。
第3行代碼使用Column屬性將觸發條件限制在第1列,使用Row屬性將觸發條件限制在第80行以內,也就是A1到A80的區域範圍內。
運行,我們在工作表中A列和C列事先錄入同樣的數字,並把列的字體設置為白色隱藏,點擊A列就會在B列出現A列的數字,類似於遊戲效果。
二 為了實現根據單元格選中範圍精準的控制選擇觸發事件,我們需要對代碼進一步優化。例如:當我們選中的是兩個或兩個以上連續單元格,而且是在一列時才能執行後續的代碼(可以為兩個連續個單格,也可以是多個連續單元格,但必須是為同一列),其它情況時則 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
代碼窗口:
代碼解析: 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指定新單元格區域的列數。若省略該參數,則新單元格區域的列數與原來相同。
運行:
今日內容迴向:
1 如何利用Column屬性和Row屬性實現精準的觸發事件?
2 如何判斷連續的單元格在整行或整列呢?