Excel &引用;具有指定名称的项不存在';“未找到”;。错误

Excel &引用;具有指定名称的项不存在';“未找到”;。错误,excel,vba,Excel,Vba,我编写了宏代码,以便在excel文件打开时检查所有工作表中的单元格“w6”。当“w6”为空时,它应该隐藏图形“FG”,并且只显示图形“F”。 当“w6”不为空时,它应该隐藏图形“F”,并且只显示图形“FG”。我将每个图形的名称设置为“F”和“FG”。但是,在中有一条错误消息 wsht.Shapes.Range(Array(“FG”)).Visible=msoFalse行在HideFG宏中指出“未找到具有指定名称的项”。我确信图形名称是“FG”,但为什么会发生这种情况?有没有能解决这个问题的天才

我编写了宏代码,以便在excel文件打开时检查所有工作表中的单元格
“w6”
。当
“w6”
为空时,它应该隐藏图形
“FG”
,并且只显示图形
“F”
。 当
“w6”
不为空时,它应该隐藏图形
“F”
,并且只显示图形
“FG”
。我将每个图形的名称设置为
“F”
“FG”
。但是,在中有一条错误消息
wsht.Shapes.Range(Array(“FG”)).Visible=msoFalse
行在
HideFG
宏中指出“未找到具有指定名称的项”。我确信图形名称是
“FG”
,但为什么会发生这种情况?有没有能解决这个问题的天才

Private Sub Workbook_Open()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Sheets
        With ws
            If .Range("W6").Value = 0 Then
                HideFG ws
            Else
                HideF ws
            End If
        End With
    Next

End Sub

Sub HideF(wsht As Worksheet)

'
' HideF Macro
'

'
    For i = 1 To wsht.Shapes.Count
    wsht.Shapes(i).Visible = msoTrue
    Next i

    wsht.Shapes.Range(Array("F")).Visible = msoFalse
    Application.CommandBars("Selection").Visible = False

End Sub

Sub HideFG(wsht As Worksheet)

'
' HideFG Macro
'

'
    For i = 1 To wsht.Shapes.Count
    wsht.Shapes(i).Visible = msoTrue
    Next i

    wsht.Shapes.Range(Array("FG")).Visible = msoFalse
    Application.CommandBars("Selection").Visible = False

End Sub


您不必调用另一个宏,只需尝试以下操作:

如果您所指的实际上是
形状

Private Sub Workbook_Open()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Sheets
    ws.Shapes.Range(Array("F", "FG")).Visible = False
    If ws.[W6] = 0 Then
        ws.Shapes("F").Visible = True
    Else
        ws.Shapes("FG").Visible = True
    End If
Next ws

End Sub
或者当它们实际上是
图表对象时

Private Sub Workbook_Open()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Sheets
    If ws.[W6] = 0 Then
        ws.ChartObjects("F").Visible = True
        ws.ChartObjects("FG").Visible = False
    Else
        ws.ChartObjects("F").Visible = False
        ws.ChartObjects("FG").Visible = True
    End If
Next ws

End Sub

根据你的问题,我觉得你可能不想把所有的纸都圈起来

在这种情况下,更改:

For Each ws In ThisWorkbook.Sheets
进入:


让我知道它是否适用于您:)

您只需尝试以下操作,而无需调用另一个宏:

如果您所指的实际上是
形状

Private Sub Workbook_Open()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Sheets
    ws.Shapes.Range(Array("F", "FG")).Visible = False
    If ws.[W6] = 0 Then
        ws.Shapes("F").Visible = True
    Else
        ws.Shapes("FG").Visible = True
    End If
Next ws

End Sub
或者当它们实际上是
图表对象时

Private Sub Workbook_Open()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Sheets
    If ws.[W6] = 0 Then
        ws.ChartObjects("F").Visible = True
        ws.ChartObjects("FG").Visible = False
    Else
        ws.ChartObjects("F").Visible = False
        ws.ChartObjects("FG").Visible = True
    End If
Next ws

End Sub

根据你的问题,我觉得你可能不想把所有的纸都圈起来

在这种情况下,更改:

For Each ws In ThisWorkbook.Sheets
进入:


让我知道它是否适合您:)

我相信这是因为您没有指定要选择的形状。在循环中,您指定的形状类似于
Shapes(i)
,但在下一部分中,它不知道要隐藏哪个形状。我相信这是因为您没有指定要选择哪个形状。在您指定的循环中,例如
形状(i)
,但在下一部分中,它不知道要隐藏哪个形状以获取帮助:)我复制并粘贴了代码,并在“ws.Shapes.Range(Array(“F”,“FG”))行中显示“找不到具有指定项目的项目”。Visible=False:(我确信我已将图形名称同时指定给F和FG graph。我不知道为什么会出现这样的消息…感谢您的帮助,现在它显示了“未找到指定项目的项目”消息,其中包含“ws.ChartObjects(“FG”).Visible=False”该图表是普通条形图:)这是一个很大的谜团…图表名称是正确的…但为什么它说它找不到它…我太迷路了。@MooChangPark,记住,根据你的最后一个问题,你可能不想遍历所有的表格。当图表不存在时,它会向你抛出错误!谢谢你的帮助:)我复制并粘贴了代码,它说“ws.Shapes.Range(Array(“F”,“FG”)).Visible=False”行中的“找不到具有指定项的项”):(我确信我已将图形名称指定给了F和FG图形。我不知道为什么会出现这样的消息……感谢您的帮助,现在它显示了带有“ws.ChartObjects(“FG”)的“找不到具有指定项的项”消息).Visible=False“图表是一个普通的条形图:)这是一个很大的谜…图表名称是正确的…但为什么它说它找不到它…我太迷路了。@MooChangPark,记住,根据你的最后一个问题,你可能不想循环所有的表格。当图表不存在时,它会抛出这个错误!