[英]Excel VBA: Trigger macro on cut/paste/delete/insert events
我有一個定義為宏的條件格式設置規則,該規則將刪除舊規則並將其替換為更新規則:
Sub setCondFormat()
Set Table = ActiveSheet.ListObjects("Rules")
Table.Range.FormatConditions.Delete
Set Attribute = Table.ListColumns("Attribute")
With Attribute.DataBodyRange.FormatConditions _
.Add(xlExpression, xlEqual, "=ISEMPTY(A2)")
With .Interior
.ColorIndex = 0
End With
End With
End Sub
Excel中的條件格式需要更新。 否則,規則中的單元格區域將變得零散。
假設您有兩個規則:
$A$1:$A$30
變紅 $B$1:$B$30
變成藍色現在選擇A10:B10
並將其復制/粘貼到A20:B20
。 對於適用於這些單元格的規則中的A20:B20
,並添加具有A20:B20
格式的新規則。 您最終有四個規則:
=$A$20
紅色 =$B$20
藍色 =$A$1:$A$19,$A$21:$A$30
紅色 =$B$1:$B$19,$B$21:$B$30
藍色 通過剪切/粘貼/刪除/插入事件更改表結構時,會發生這種情況。
如何在剪切/粘貼/刪除/插入事件上觸發上述VBA宏?
我發現的解決方案是在打開工作簿時使用表的內容創建一個新的工作表。 首先,您需要使用公共變量創建一個模塊。
Public OldRange As Range
Public NewRange As Range
Public Table As ListObject
然后,使用“打開工作簿”事件。
Private Sub Workbook_Open()
Dim sh As Worksheet
Dim address As String
For Each sh In Worksheets
If sh.Name = "DATA" Then
Worksheets("DATA").Activate
ActiveSheet.Delete
End If
Next
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "DATA"
Set sh = ActiveWorkbook.Sheets("Plan1")
sh.Activate
Set Table = ActiveSheet.ListObjects("Rules")
Set OldRange = Table.Range
address = Table.Range.address
Table.Range.Copy
Set sh = ActiveWorkbook.Sheets("DATA")
sh.Activate
Range(address).PasteSpecial (xlPasteAll)
End Sub
然后,使用事件Worksheet_Change來驗證原始表和先前保存的表的內容。
Private Sub Worksheet_Change(ByVal Target As Range)
Set Table = ActiveSheet.ListObjects("Rules")
If Intersect(Target, Table.Range) Is Nothing Then Exit Sub 'this will guarantee that the change made in your sheet is in your desired table
Set NewRange = Table.Range
Dim rng As Range
Dim rngaddr As String
Dim TableChanged As Boolean
TableChanged = False
For Each rng In NewRange
rngaddr = rng.address
If rng.Value <> ActiveWorkbook.Sheets("DATA").Range(rngaddr).Value Then
'do something
TableChanged = True
End If
Next
End Sub
請記住:每次更改表時,都需要保存表的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.