Worksheet_Change特定工作表上的目标地址



当工作表 2 上的单元格 c9 发生变化时,我正在尝试自动隐藏/取消隐藏工作表 1 上的行。

我已全部设置了隐藏/取消隐藏行切换。

当目标单元格位于工作表 2 上时,我的工作表更改有效,但当我尝试将目标单元格设置为 sheet1 时不起作用(如下面的代码所示(。

模块 1 代码:

Sub Hide_Rows_Toggle()
Dim r As Range
For Each r In Columns(2).Cells
If r.Value = "X" Then
r.EntireRow.Hidden = True
End If
Next r
End Sub

表2代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Worksheets("Sheet1").Range("$C$9") Then
Call Hide_Rows_Toggle
End If
End Sub

ThisWorkbook中:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Sheet1" And Target.Address = "$C$9" Then
Call Hide_Rows_Toggle
End If
End Sub

现在我回家了,并测试了以下内容;

您尚未限定Hide_Rows_Toggle()子中的工作簿或工作表对象。因此,它隐式引用了ActiveWorksheet

每个工作表。列文档:

使用不带对象限定符的 Columns 属性等效于使用ActiveSheet.Columns。如果活动文档不是工作表,则Columns属性将失败。

Worksheet_Change事件是特定于工作表的,这意味着,该事件在每个工作表上独立触发 - 如果您在Sheet1上进行更改,则该事件将不会在Sheet2等上触发。

您应该执行以下操作:

  1. Worksheet_Change事件移动到发生更改的模块Sheet1
  2. Hide_Rows_Toggle子例程中限定目标工作表(至少(,如下所示:

像这样在潜艇中限定您的范围:

Sub Hide_Rows_Toggle()
Dim r As Range
For Each r In ThisWorkbook.Sheets("Sheet2").Columns(2).Cells
If r.Value = "X" Then
r.EntireRow.Hidden = True
End If
Next r
End Sub

这可确保行仅在 Sheet2 上隐藏,否则它将始终以ActiveSheet为目标,该工作表必须是您在其中进行更改的工作表。

最后,目前还不清楚您在Worksheet_Change事件中试图评估的内容。

目前,您正在寻找Target.Address是否等于Sheet1上单元格$C$9中的Value。这是因为 Range 对象的默认成员是 Value。因此,仅当您在$C$9中设置单元格引用以指示哪个单元格触发 sub 时,它才会返回 true。

如果您打算在更改$C$9中的值时运行Hide_Rows_Toggle,则需要将.Address属性添加到您的范围 -If Target.Address = Worksheets("Sheet1").Range("$C$9").Address- 或 - 只需将其更改为字符串以匹配地址,如If Target.Address = "$C$9" Then.

最新更新