用于导航的用户表单和 select 另一个打开的工作簿

Userform to navigate and select another open workbook

我有一个小程序 VBA,它实际上是一个用户窗体,它允许我显示我正在处理的一个打开的工作簿的所有现有工作sheet。通过此用户表单,我可以 select 另一个 sheet 并通过此用户表单单击 sheet,它会将我重新定位到所需的工作 sheet。 现在我试着修改这个程序的一部分,以便用我所有打开的工作簿做同样的事情。这意味着如果我打开了多个工作簿,我希望我的用户窗体允许我显示所有现有的打开工作簿,并通过用户窗体 selecting 所需的工作簿,它将我重新定向到该工作簿(这意味着selected 用户表单中的工作簿已激活并 selected)。问题是当我 运行 代码时,我有一条错误消息 424 VBA 运行-time error '424' Object Required Error…

PS:我的代码格式真的很抱歉,但我没能把它放在正确的格式中..

在此先感谢您的帮助 哈维

请在此处找到适用于与工作相关的用户窗体的原始代码sheet(这个有效):

Sub UserForm_Initialize()
    Dim n As Long
    Dim msg As String
    Dim i As Long
    Dim s As String
    Dim sht As Worksheet

    Do
        n = n + 1
        Me.ListBox1.AddItem Sheets(n).Name
    Loop Until n = Worksheets.Count

End Sub

请在此处找到与工作簿相关的用户窗体的修改代码(这个不起作用:运行时间错误424):

Sub UserForm_Initialize()
    Dim n As Long
    Dim msg As String
    Dim i As Long
    Dim s As String
    Dim Wb As Workbook

    Do
        n = n + 1
        Me.ListBox1.AddItem Workbooks(n).Name
    Loop Until n = Worksbooks.Count

End Sub

如果没有理由在您的代码中解析实际数字,那么为什么不直接循环工作表呢?

Sub UserForm_Initialize()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        Me.ListBox1.AddItem ws.Name
    Next ws

End Sub

我可以提出一个简单的 for 循环吗?

Dim i As Long
For i = 1 To Application.Workbooks.Count
    Debug.Print Application.Workbooks(i).Name
Next

然后,如果您有不同的 Excel 实例(不同的 Application 对象与您的 Userform 来自的对象不同),这会变得有点复杂。 (如果您在 Excel 2010 或更新版本中工作,情况可能并非如此)。但是,如果是这种情况,它需要几个 Win32 API 调用和对 Excel 的 "windows" 的一些见解。我过去曾在这里找到答案:Can VBA Reach Across Instances of Excel?