导航并选择另一个打开的工作簿的用户窗体

时间:2018-10-04 13:33:49

标签: excel vba excel-vba userform

我有一个小程序VBA,它实际上是一种用户窗体,可让我显示我正在使用的一个打开的工作簿的所有现有工作表。通过此用户窗体,我可以选择另一个工作表,然后通过此用户窗体单击工作表,它会将我重新定向到所需的工作表。 现在,我尝试修改此程序的一部分,以使其与所有打开的工作簿相同。这意味着如果我有几个打开的工作簿,我希望我的用户窗体允许我显示所有现有的打开的工作簿,并通过用户窗体选择所需的工作簿,它会将我重新定向到该工作簿(这意味着用户窗体中的选定工作簿被激活并选中)。问题是当我运行代码时,我收到一条错误消息424 VBA运行时错误'424'对象必需错误…

PS:对我的代码格式表示非常抱歉,但我无法将其设置为正确的格式。

在此先感谢您的帮助 哈维

请在此处找到适用于与工作表相关的用户表单的原始代码(此代码有效):

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

2 个答案:

答案 0 :(得分:1)

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

Sub UserForm_Initialize()
    Dim ws As Worksheet

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

End Sub

答案 1 :(得分:0)

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

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

然后,如果您具有不同的Excel实例(不同的应用程序对象与您的用户窗体所来自的对象不同),这将变得有些复杂。 (如果您使用的是Excel 2010或更高版本,则可能不是这种情况)。但是,如果是这种情况,则需要几个Win32 API调用以及对Excel“窗口”的一些了解。我过去曾在这里找到答案:Can VBA Reach Across Instances of Excel?