将用户窗体复制到另一个工作簿
Copy userform to another workbook
我已经在寻找这个问题的答案,但找不到任何与我正在寻找的完全匹配的东西,如果有人有答案或者可以指出我正在寻找的问题的方向这个,将不胜感激。
我一直在谈论构建一个将数据输入工作簿的解决方案并已成功构建它,但是需要将其添加到的工作簿是一个非常活跃的工具并且会不断更新 new/changed 数据,所以我不得不在工作簿的副本中构建它,现在需要将它添加到活动工作簿中。我知道一个简单的方法是简单地从活动工作簿中获取数据并将其添加到我的版本中,然后使我的版本成为活动书,但这将是一项相当大的工作,我只能将工作簿脱机 ~ 5 分钟,所以我认为更简单的方法是将我的代码和用户表单复制到活动电子表格中。代码很容易复制和粘贴,但我找不到将用户表单(格式和所有)复制到工作簿的方法,有没有办法将其导出然后将其导入实时工作簿?
我希望这是清楚易懂的,如果我需要澄清任何事情,请告诉我。
您可以为两个 Excel 工作表打开代码编辑器。现在将用户表单从一个 Excel 拖放到另一个 Excel。谢谢
我将向您展示如何在 VBA 中导出和导入用户表单,然后在另一个工作簿中重新导入它:
Option Explicit
Public Function CopyUserForm(ByVal FormName$, Optional ByVal WB_Dest As Workbook) As Workbook 'copies sheets/Thisworkbook/Userforms/Modules/Classes to a new workbook
Dim Comp As VBComponent
Dim CompStr$
On Error Resume Next 'needed for testing if component already exists in destination WorkBook, and vbe minimizing
If WB_Dest Is Nothing Then Set WB_Dest = Application.Workbooks.add
For Each Comp In ThisWorkbook.VBProject.VBComponents
With Comp
If .Type = vbext_ct_MSForm Then '=3
If .Name = FormName Then
'// Export Form
CompStr = "C:\" & .Name ' & " " & Replace(Date, "/", "-") & ".frm"
.Export FileName:=CompStr 'this line fails if the destination Disk is protected, wich happened on my system disk :/
'// Import Form to new workbook
WB_Dest.VBProject.VBComponents.Import FileName:=CompStr
'// Kill temporary Form Files
Kill CompStr: Kill CompStr & ".frx"
Exit For
End If
End If
End With 'comp
Next Comp
Err.Clear: On Error GoTo 0
Set CopyComponentsModules = WB_Dest
Set Comp = Nothing
Set WB_Dest = Nothing
End Function
然后您可以这样调用该函数:例如 CopyUserForm "UserForm1"
。
我已经在寻找这个问题的答案,但找不到任何与我正在寻找的完全匹配的东西,如果有人有答案或者可以指出我正在寻找的问题的方向这个,将不胜感激。
我一直在谈论构建一个将数据输入工作簿的解决方案并已成功构建它,但是需要将其添加到的工作簿是一个非常活跃的工具并且会不断更新 new/changed 数据,所以我不得不在工作簿的副本中构建它,现在需要将它添加到活动工作簿中。我知道一个简单的方法是简单地从活动工作簿中获取数据并将其添加到我的版本中,然后使我的版本成为活动书,但这将是一项相当大的工作,我只能将工作簿脱机 ~ 5 分钟,所以我认为更简单的方法是将我的代码和用户表单复制到活动电子表格中。代码很容易复制和粘贴,但我找不到将用户表单(格式和所有)复制到工作簿的方法,有没有办法将其导出然后将其导入实时工作簿?
我希望这是清楚易懂的,如果我需要澄清任何事情,请告诉我。
您可以为两个 Excel 工作表打开代码编辑器。现在将用户表单从一个 Excel 拖放到另一个 Excel。谢谢
我将向您展示如何在 VBA 中导出和导入用户表单,然后在另一个工作簿中重新导入它:
Option Explicit
Public Function CopyUserForm(ByVal FormName$, Optional ByVal WB_Dest As Workbook) As Workbook 'copies sheets/Thisworkbook/Userforms/Modules/Classes to a new workbook
Dim Comp As VBComponent
Dim CompStr$
On Error Resume Next 'needed for testing if component already exists in destination WorkBook, and vbe minimizing
If WB_Dest Is Nothing Then Set WB_Dest = Application.Workbooks.add
For Each Comp In ThisWorkbook.VBProject.VBComponents
With Comp
If .Type = vbext_ct_MSForm Then '=3
If .Name = FormName Then
'// Export Form
CompStr = "C:\" & .Name ' & " " & Replace(Date, "/", "-") & ".frm"
.Export FileName:=CompStr 'this line fails if the destination Disk is protected, wich happened on my system disk :/
'// Import Form to new workbook
WB_Dest.VBProject.VBComponents.Import FileName:=CompStr
'// Kill temporary Form Files
Kill CompStr: Kill CompStr & ".frx"
Exit For
End If
End If
End With 'comp
Next Comp
Err.Clear: On Error GoTo 0
Set CopyComponentsModules = WB_Dest
Set Comp = Nothing
Set WB_Dest = Nothing
End Function
然后您可以这样调用该函数:例如 CopyUserForm "UserForm1"
。