在VBA函数中引用另一个工作表中的单元格

时间:2019-03-15 00:58:11

标签: 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最终将被隐藏。

2 个答案:

答案 0 :(得分:2)

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

假设您要捕获Book2.Sheet2Book1中的事件。做

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

屏幕截图

enter image description here

测试

Sample()运行过程Book1

有趣的阅读

Events And Event Procedures In VBA by Charles H. Pearson

答案 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”以适合您的工作表名称。