将VBA的范围缩小到单个文件?

当我只打开这个特定的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("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(0, 185, 0) End If End Sub 

问题是,如果我打开另一个文档,而这个打开,我得到以下错误:

在这里输入图像说明

debugging揭示了问题出在哪里。

在这里输入图像说明

我是VBA的新手,但是我尝试在所有Sheets引用之前添加ActiveSheet ,并没有减轻错误。 我如何确保只能在脚本所在文档的“Dashboard”表单上运行?

这是因为如果您只写了Sheets它就像ActiveWorkbook.Sheets 。 因此,您需要添加工作簿限定符,如Workbooks("MyBook").Sheets("SheetName")

或者你可以使用ThisWorkbook.Sheets("SheetName") 。 然后将使用运行VBA代码的工作簿的工作表集合。

将代码更改为以下内容:

 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”引用工作簿,代码将只检查代码所在的工作簿。