首页 > 解决方案 > 在 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 最终会被隐藏。

标签: excelvba

解决方案


要捕获Sheet2隐藏工作簿(我们称之为 Book2)中的事件,您需要创建一个类来管理_SheetChange事件捕获。

假设您要捕获Book2.Sheet2from中的事件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

有趣的阅​​读

Charles H. Pearson 在 VBA 中的事件和事件过程


推荐阅读