Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将VBA的范围缩小到单个文档?_Vba_Excel - Fatal编程技术网

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

将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

当我只打开这个特定的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
问题是,如果在打开此文档的同时打开另一个文档,则会出现以下错误:

调试揭示了问题所在


我是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:您的答案非常有效。请张贴作为答案,这样我可以接受。