用于导航的用户表单和 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?
我有一个小程序 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?