将VBA的范围缩小到单个文档?
当我只打开这个特定的Excel文件时,我有下面的子例程,它可以像我想要的那样工作将VBA的范围缩小到单个文档?,vba,excel,Vba,Excel,当我只打开这个特定的Excel文件时,我有下面的子例程,它可以像我想要的那样工作 Private Sub Worksheet_Calculate() If Sheets("Dashboard").Range("Z11").Value > 0 Then Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(185, 0, 0) Else Sheets("D
Private Sub Worksheet_Calculate()
If Sheets("Dashboard").Range("Z11").Value > 0 Then
Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(185, 0, 0)
Else
Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(0, 185, 0)
End If
End Sub
问题是,如果在打开此文档的同时打开另一个文档,则会出现以下错误:
调试揭示了问题所在
我是VBA新手,但我尝试在所有工作表引用之前添加
ActiveSheet
,但这并没有减轻错误。如何确保该脚本仅在脚本所在文档的“仪表板”页上运行?将代码更改为以下内容:
Private Sub Worksheet_Calculate()
If ThisWorkbook.Sheets("Dashboard").Range("Z11").Value > 0 Then
ThisWorkbook.Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(185, 0, 0)
Else
ThisWorkbook.Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(0, 185, 0)
End If
End Sub
通过引用带有“ThisWorkbook”的工作簿,代码将只签入代码所在的工作簿。这是因为如果您只编写
工作表
,它与ActiveWorkbook.Sheets
相同。因此,您需要添加工作簿限定符,例如工作簿(“MyBook”).Sheets(“SheetName”)
或者您可以使用
此工作簿.Sheets(“SheetName”)
。然后将使用运行VBA代码的工作簿的“工作表”集合 这是因为如果您只编写工作表
,它与ActiveWorkbook.Sheets
相同。因此,您需要添加工作簿限定符,例如工作簿(“MyBook”).Sheets(…)
。使用此工作簿.Sheets(“Dashboard”)
@dee:您的答案非常有效。请张贴作为答案,这样我可以接受。