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