Excel 将工作表复制到新工作簿,但仅携带一个宏。这可能吗?

Excel 将工作表复制到新工作簿,但仅携带一个宏。这可能吗?,excel,vba,Excel,Vba,我的一本报告工作手册将数据拆分为单独的工作表,然后将其发送到各个办公室。问题是,我的报告工作簿中都有大量我使用的宏,但我不希望其他人进入或掌握这些宏。我希望它能延续一些东西,主要是工作表更改和关闭事件(或者宏)。基本上,每个办公室都必须核实和记录任何需要更改的内容。如果可能的话,我一直在犹豫尝试使用什么方法。我的选择是: 1) 包括一个日期列,通过工作簿更改事件中的某些内容进行更新,以及一个用户表单提示,将其名称输入为“上次编辑人”,作为关闭前事件;或 2) 包括一个宏,该宏带有一个命令按钮,用

我的一本报告工作手册将数据拆分为单独的工作表,然后将其发送到各个办公室。问题是,我的报告工作簿中都有大量我使用的宏,但我不希望其他人进入或掌握这些宏。我希望它能延续一些东西,主要是工作表更改和关闭事件(或者宏)。基本上,每个办公室都必须核实和记录任何需要更改的内容。如果可能的话,我一直在犹豫尝试使用什么方法。我的选择是:

1) 包括一个日期列,通过工作簿更改事件中的某些内容进行更新,以及一个用户表单提示,将其名称输入为“上次编辑人”,作为关闭前事件;或
2) 包括一个宏,该宏带有一个命令按钮,用户单击该按钮可打开一个用户窗体,该窗体自动包含当前日期和一个供用户输入姓名的框。当用户单击“确定”时,表单关闭,工作簿保存并关闭


假设我不想为此使用相同的代码设置每个单独的工作簿,是否可以在我的报告工作簿中创建所有这些,然后创建一个宏来创建单独的工作簿(我已经可以这样做了),然后只复制上面指定任务的编码/宏(我不知道从哪里开始)?

您可以使用以下步骤将某些VBA代码从工作簿复制/粘贴到另一个工作簿:

Sub CopyModule(SourceWB As Workbook, strModuleName As String, _
    TargetWB As Workbook)
' copies a module from one workbook to another
' example: 
' CopyModule Workbooks("Book1.xls"), "Module1", _
'    Workbooks("Book2.xls")
Dim strFolder As String, strTempFile As String
    strFolder = SourceWB.Path
    If Len(strFolder) = 0 Then strFolder = CurDir
    strFolder = strFolder & "\"
    strTempFile = strFolder & "~tmpexport.bas"
    On Error Resume Next
    SourceWB.VBProject.VBComponents(strModuleName).Export strTempFile
    TargetWB.VBProject.VBComponents.Import strTempFile
    Kill strTempFile
    On Error GoTo 0
End Sub
然后使用:

CopyModule Workbooks("Book1.xls"), "Module1", Workbooks("Book2.xls")

找到

您可以使用以下步骤将某些VBA代码从工作簿复制/粘贴到另一个工作簿:

Sub CopyModule(SourceWB As Workbook, strModuleName As String, _
    TargetWB As Workbook)
' copies a module from one workbook to another
' example: 
' CopyModule Workbooks("Book1.xls"), "Module1", _
'    Workbooks("Book2.xls")
Dim strFolder As String, strTempFile As String
    strFolder = SourceWB.Path
    If Len(strFolder) = 0 Then strFolder = CurDir
    strFolder = strFolder & "\"
    strTempFile = strFolder & "~tmpexport.bas"
    On Error Resume Next
    SourceWB.VBProject.VBComponents(strModuleName).Export strTempFile
    TargetWB.VBProject.VBComponents.Import strTempFile
    Kill strTempFile
    On Error GoTo 0
End Sub
然后使用:

CopyModule Workbooks("Book1.xls"), "Module1", Workbooks("Book2.xls")

找到类似这样的

。将在我的测试文件夹中修补它,但对答案点头。谢谢!像这样。将在我的测试文件夹中修补它,但对答案点头。谢谢!