Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将userform复制到其他工作簿_Excel_Userform_Vba - Fatal编程技术网

Excel 将userform复制到其他工作簿

Excel 将userform复制到其他工作簿,excel,userform,vba,Excel,Userform,Vba,我一直在寻找这个问题的答案,但找不到任何与我所寻找的完全匹配的答案,如果有人有答案或能为我指出一个回答这个问题的方向,我将不胜感激 我已经与构建一个将数据输入工作簿的解决方案进行了讨论,并成功地构建了该解决方案,但是需要添加到的工作簿是一个非常活跃的工具,并且不断使用新的/更改的数据进行更新,因此我不得不在工作簿的副本中构建该解决方案,现在需要将其添加到活动工作簿中。我知道一个简单的方法是从活动工作簿中获取数据并将其添加到我的版本中,然后使我的版本成为活动工作簿,然而这将是一个相当大的任务,我只

我一直在寻找这个问题的答案,但找不到任何与我所寻找的完全匹配的答案,如果有人有答案或能为我指出一个回答这个问题的方向,我将不胜感激

我已经与构建一个将数据输入工作簿的解决方案进行了讨论,并成功地构建了该解决方案,但是需要添加到的工作簿是一个非常活跃的工具,并且不断使用新的/更改的数据进行更新,因此我不得不在工作簿的副本中构建该解决方案,现在需要将其添加到活动工作簿中。我知道一个简单的方法是从活动工作簿中获取数据并将其添加到我的版本中,然后使我的版本成为活动工作簿,然而这将是一个相当大的任务,我只能使工作簿脱机约5分钟,因此我想更简单的方法是将代码和用户表单复制到活动电子表格中。代码很容易复制和粘贴,但我找不到将userform格式和所有内容复制到工作簿中的方法,有没有方法将其导出,然后导入到live工作簿中


我希望这是清楚易懂的,如果我需要澄清任何事情,请告诉我。

您可以打开两个Excel工作表的代码编辑器。现在将userform从一个Excel拖放到另一个Excel。谢谢

您可以打开两个Excel工作表的代码编辑器。现在将userform从一个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。

我将向您展示如何在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。

就像拖放模块一样?是的,在代码编辑器中看到两个Excel工作表后,只需将Userforms从源工作表拖放到目标工作表。谢天谢地,谢天谢地,我不知道我怎么会不知道你能做到!++是的,这是最简单的@鼓:另一种方式。在项目资源管理器中右键单击userform,然后单击导出文件。保存.Frm文件。在另一个工作簿中。只需从project explorer导入该文件。您也可以在vba中执行此操作。与拖放模块一样?是的,在代码编辑器中看到两个Excel工作表后,只需将Userforms从源工作表拖放到目标工作表。谢天谢地,谢天谢地,我不知道我怎么会不知道你能做到!++是的,这是最简单的@鼓:另一种方式。在项目资源管理器中右键单击userform,然后单击导出文件。保存.Frm文件。在另一个工作簿中。只需从project explorer导入该文件。您也可以在vba中执行此操作。我认为这应该是Sub而不是Function,不是吗?我认为这应该是Sub而不是Function,不是吗?