我有一个小程序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
答案 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?