我是VBA的新手,但已设法创建一个代码,将我的工作表的标题链接到另一个工作表上的单元格。
每次单击活动工作表中的单元格时,代码都会运行。我希望代码只在另一个工作表中的某个单元格发生变化时运行。 "报告"有标题 "输入"具有代码所引用的单元格(B18)以及我希望代码在更改时运行的单元格(B3)。
以下是我已经拥有的代码。
Private Sub Worksheet_selectionChange(ByVal Target As Range)
ActiveSheet.PageSetup.RightHeader = "&28" & Format(Worksheets("Input").Range("b18").Text)
End Sub
非常感谢任何帮助!!!
答案 0 :(得分:0)
不确定你的第二段;我的理解是你要监视输入工作表上的单元格B3,当它发生变化时,调整工作表报表的PageSetup的RightHeader,使其反映输入工作表中单元格B18中的内容。如果这是正确的,您可以将以下代码放在输入工作表后面:
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
...您可以毫无后顾之忧地重新组织输入工作表的布局。
最后,不是通过其选项卡的名称引用工作表(从Excel中看到),您可以直接使用它们的CodeName来引用它们,如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
...它能够承受报告工作表选项卡名称的更改以及输入工作表的重组。