DialogSheets(";Name";).Labels.Visible=True不在Excel VBA中的所有DialogSheets上工作

DialogSheets(";Name";).Labels.Visible=True不在Excel VBA中的所有DialogSheets上工作,excel,vba,Excel,Vba,我已经得到了一个古老的,但在大多数情况下,工作Excel解决方案。 它使用了大量的DialogSheets(UserForms之前的Excel 5/95技术) 现在我想弄清楚作者想做什么,代码非常可怕。我偶然发现的一个问题是: 有些工作表可以很好地处理以下代码: DialogSheets("Name1").Show DialogSheets("Name1").Labels.Visible = True DialogSheets("Name1").EditBoxes.Visible = True

我已经得到了一个古老的,但在大多数情况下,工作Excel解决方案。 它使用了大量的DialogSheets(UserForms之前的Excel 5/95技术)

现在我想弄清楚作者想做什么,代码非常可怕。我偶然发现的一个问题是:

有些工作表可以很好地处理以下代码:

DialogSheets("Name1").Show
DialogSheets("Name1").Labels.Visible = True
DialogSheets("Name1").EditBoxes.Visible = True
DialogSheets("Name1").CheckBoxes.Visible = True
DialogSheets("Name1").DropDowns.Visible = True
在其他人身上,我得到一个:

运行时错误1004“无法设置Labels类的Visible属性”

我不能完全理解其中的区别,Dialogsheets上的文档非常稀少。如果有人知道的话,我很感谢你的建议

更新 答案表明,一些对话表可能没有标签,因此抛出了1004。事实并非如此。这种情况会立即发生在以下区域:

?DialogSheets("Name1").Labels.Count
205 
?DialogSheets("Name2").Labels.Count
7 
DialogSheets("Name1").Labels.Visible = True ' Throws 1004
DialogSheets("Name2").Labels.Visible = True ' executes fine
?DialogSheets("Name2").Labels.Visible = True ' returns true
True

上面的代码将标签、下拉列表、编辑框和复选框的可见性设置为
True

它抛出错误1004,因为在一些
对话框中,标签、下拉列表、编辑框或复选框丢失。它在那些4个都存在的地方起作用


要查看它是否正常工作,请关闭所有Excel应用程序。然后打开一个全新的并运行以下代码:

Sub TestMe()

    Dim someDialogSheet As DialogSheet
    Set someDialogSheet = ThisWorkbook.Sheets.Add(Type:=xlDialogSheet)

    With someDialogSheet
        .Name = "SoReadyToHelp"
        .Labels.Add(5, 5, 5, 5).Select
        .DropDowns.Add(10, 10, 10, 10).Select
        .CheckBoxes.Add(15, 15, 15, 15).Select
        Debug.Print .Labels.Visible
        Debug.Print .CheckBoxes.Visible
        Debug.Print .DropDowns.Visible
        .Show
    End With

End Sub


或者在它工作的代码的某个地方出现了“错误恢复下一步”

如果没有可显示的标签,代码将失败。
添加一个类似这样的检查,以确保在使其可见之前存在任何问题:

If DialogSheets("Name1").Labels.Count > 0 Then
    DialogSheets("Name1").Labels.Visible = True
End If
评论后编辑
那么我建议你试试这样:

For Each lbl In DialogSheets("Name1").Labels
    lbl.Visible = True
Next

DialogSheets(“Name1”).Labels.Count=205-这不能是solution@ExternalUse我现在添加了另一种方法。我以前也这样做过,但我不确定这是否是原作者的想法。我认为将visible属性应用于labels类(即标签的集合)可能与在集合中循环有所不同;这就是为什么我试图找出那些失败或未失败的对话框的区别。无论如何谢谢你!喜欢下面回答的评论;.Labels.Count是205,但是.Labels.Visible仍然会抛出1004运行时错误。在VBA中立即输入:
?DialogSheets(“Name1”).Labels.Count 205?DialogSheets(“Name2”).Labels.Count 7 DialogSheets(“Name1”).Labels.Visible=True”抛出1004个DialogSheets(“Name2”)。Labels.Visible=True”执行良好
@ExternalUse-奇怪。不过,如果您在新工作簿上尝试上面的代码,它会工作吗?一般来说,检查这些标签的一些只读属性。我将尝试一下,并查看标签的个人可见性状态。