将调用一个Excel文件的UserForm的VBA代码编写到文件夹中存在的所有其他Excel文件中,
john
并且主Excel(由以下代码和用户窗体组成)位于不同的位置:
Private Sub Workbook_OnClick()
Dim mypath As String
Dim file As String
Dim wb As Workbook
Dim pat As String
Application.ScreenUpdating = False
ChDrive "C:"
ChDir "C:\Users\Administrator\Desktop\John"
'john is a folder that consists of the excel files
mypath = Range("B1").Value
'mypath has the same value as chDir
file = Dir(mypath & "\" & "*.xlsx")
Do While file <> ""
Set wb = Application.Workbooks.Open(file)
If Not IsEmpty(wb) Then
Application.Visible = False
userform1.Show
End If
wb.Close
file = Dir()
Loop
End Sub
该代码将用户窗体拉到主Excel文件上,而不是文件john
夹中存在的Excel文件中。
包含要显示的用户窗体的工作簿还应该具有一个显示窗体的过程。您将需要调用此过程以显示用户表单。它可以是函数,也可以是子函数,我更喜欢函数,因为这样您可以返回成功/失败的错误处理。
在UserForm工作簿中,您将在Module1(或任何模块中,添加一个类似这样的过程,但稍后需要引用此过程):
Public Function ShowTheForm(Optional Modal As Boolean = False)
'API to display a userform in THIS workbook, from another workbook
On Error Resume Next
UserForm1.Show IIF(Modal,vbModal,vbModeless)
ShowTheForm = (Err.Number = 0)
End Function
然后,在试图打开此表单的工作簿中,您将需要调用该ShowTheForm
过程,如下所示:
Do While file <> ""
Set wb = Application.Workbooks.Open(file)
If Not IsEmpty(wb) Then
Application.Visible = False
Application.Run("'" & wb.Name & "'!Module1.ShowTheForm")
End If
wb.Close
file = Dir()
Loop
因为您已经给定ShowTheForm
了带有返回值的函数,所以您可以捕获错误,例如:
If Not Application.Run("'" & wb.Name & "'!Module1.ShowTheForm") Then
MsgBox "Unable to display..."
Exit Sub
End If
根据此处提供的一般逻辑进行修改/增强:
笔记
我认为IsEmpty
这不是对工作簿对象的适当测试,您可能需要考虑一下。我不确定您要使用该行做什么,但是我几乎可以肯定它没有按照您的想法去做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句