VBA的新手,请多多包涵。 如果其他工作表中的单元格(B2)发生更改,我正在尝试删除表格。
目前,我有:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Worksheets("sheet2").Range("B2")) Is Nothing Then
Range("B21:D30").ClearContents
End If
End Sub
我尝试了许多变体,间接的和不同的语法,但是没有用。
更新: 我还要提到,sheet2上的B2将根据用户选择链接到sheet2!B2的一组单选按钮进行更改。即我不是直接从sheet2更改B2的值。实际上,sheet2最终将被隐藏。
答案 0 :(得分:2)
要将事件捕获到隐藏工作簿的Sheet2
中(我们将其称为Book2),您需要创建一个类来管理_SheetChange
事件捕获。
假设您要捕获Book2.Sheet2
中Book1
中的事件。做
1。。插入一个类模块(我们称之为Class1
)并将此代码粘贴到此处
代码
Private WithEvents hiddenWb As Workbook
Public Property Set Workbook(wb As Workbook)
Set hiddenWb = wb
End Property
Public Property Get Workbook() As Workbook
Set Workbook = hiddenWb
End Property
Private Sub hiddenWb_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Sheet2" Then
If Not Intersect(Target, Sh.Range("B2")) Is Nothing Then
MsgBox "Range B2 was chnaged"
End If
End If
End Sub
2。。在模块中粘贴此代码
代码
Option Explicit
Dim cWb As New Class1
Sub Sample()
'~~> Set a reference to the hidden workbook
Set cWb.Workbook = Workbooks("Book2")
'~~> Change the value of the cell B2
cWb.Workbook.Sheets("Sheet2").Cells(2, 2).Value = "Blah Blah"
End Sub
屏幕截图
测试
从Sample()
运行过程Book1
有趣的阅读
答案 1 :(得分:0)
这必须写在 Sheet2 模块中:
Private Sub Worksheet_Change(ByVal Target As Range)
With Me
If Not Intersect(Target, .Range("B2")) Is Nothing Then
.Parent.Worksheets("Sheet1").Range("B21:D30").ClearContents
End If
End with
End Sub
更改“ Sheet1”以适合您的工作表名称。