excel - 在 VBA 的函数中引用另一个工作表中的单元格
问题描述
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 最终会被隐藏。
解决方案
要捕获Sheet2
隐藏工作簿(我们称之为 Book2)中的事件,您需要创建一个类来管理_SheetChange
事件捕获。
假设您要捕获Book2.Sheet2
from中的事件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
有趣的阅读
推荐阅读
- ibm-mobilefirst - 当高级查询超过 999 条记录时,IBM Advanced Find JSONStore 说“INVALID_SEARCH_FIELD”
- apache-spark - 为什么火花洗牌不会溢出到磁盘?
- laravel-5.6 - 如何从 laravel 中的 maatwebsite/excel 中删除标题键
- java - StackOverflowError 因为 JSONTokener
- r - 如何正确计算一段时间内的平均值?
- javascript - 知道点击了哪个按钮的方法 - Angular 5
- entity-framework - asp.net core中的多对多关系和多选
- html - 如何限制屏幕阅读器不阅读特定文本?
- git - .gitignore 检查零件名称到文件夹以忽略所有文件和子文件夹
- reactjs - reactjs:TypeError:无法读取未定义的属性“来自”