【问题标题】:Run VBA when cell changes on a different worksheet当不同工作表上的单元格更改时运行 VBA
【发布时间】:2017-10-31 15:58:01
【问题描述】:

我是 VBA 的新手,但我设法编写了一个代码,将我的工作表的标题链接到另一个工作表上的单元格。

每次单击活动工作表中的单元格时,代码都会运行。我希望代码仅在另一个工作表中的某个单元格更改时运行。 “报告”有标题 “输入”具有代码引用的单元格(B18)和我希望代码在更改时运行的单元格(B3)。

以下是我已有的代码。

Private Sub Worksheet_selectionChange(ByVal Target As Range)
ActiveSheet.PageSetup.RightHeader = "&28" & Format(Worksheets("Input").Range("b18").Text)
End Sub

非常感谢任何帮助!!!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    不确定您的第二段;我的理解是,您要监视输入工作表上的单元格 B3,当它发生变化时,调整工作表报告的 PageSetup 的 RightHeader,使其反映输入工作表上单元格 B18 中的内容。如果正确,您可以将以下代码放在 Input 工作表后面:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Application.Intersect(Target, Me.Range("B3")) Is Nothing Then
            ThisWorkbook.Worksheets("Report").PageSetup.RightHeader = "&28" & Me.Range("B18").Text
        End If
    End Sub
    

    ...并删除您的 Worksheet_SelectionChange 程序。

    这个想法是监控输入工作表上的变化,并针对涉及其 B3 单元格的变化采取行动。

    理想情况下,您应该为上面的单元格命名,这样即使您在输入工作表上添加或删除行和列,您的代码也能继续工作。见Define and use names in formulas。如果将Inputs!B3 定义为MyMonitoredValue 并将Inputs!B18 定义为MyPageSetupValue,则上面的代码将变为:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Application.Intersect(Target, Me.Range("MyMonitoredValue")) Is Nothing Then
            ThisWorkbook.Worksheets("Report").PageSetup.RightHeader = "&28" & Me.Range("MyPageSetupValue").Text
        End If
    End Sub
    

    ...您可以毫无顾虑地重新组织输入工作表的布局。

    最后,您可以在工作表的(名称)属性下的“属性”窗口中,直接使用它们的代码名称(从 VBA 编辑器中看到)来引用它们,而不是通过其选项卡的名称来引用它们(按 Ctrl+R 显示 Project Explorer,单击 Microsoft Excel Objects 节点下的工作表,然后按 F4 显示 Properties 窗口)。您可以更改此值;我通常会将其更改为 shtReport。代码的另一个版本是:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Application.Intersect(Target, Me.Range("MyMonitoredValue")) Is Nothing Then
            shtReport.PageSetup.RightHeader = "&28" & Me.Range("MyPageSetupValue").Text
        End If
    End Sub
    

    ...能够承受报告工作表选项卡名称的更改和输入工作表的重组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多