0

我有一个工作簿,它是我们小组的主要模板。在此模板中,我有几个选项卡,我想在其中合并宏,以根据值隐藏和取消隐藏行。我在一个选项卡上设置了这个宏,测试了它并且它工作。但是,当我完成用户将要执行的操作的过程时,宏并没有延续到新的工作簿。如果我无法让宏结转,我不想浪费时间在其他工作表上做宏。有人可以帮忙吗,因为我的模板今天到期?

如果需要有关模板流程的更多信息....模板会打开一个用户表单,供个人输入特定信息,然后在上传信息提要的过程中,它会创建一个新工作簿。

4

1 回答 1

1

在代码模块中编写模板宏,然后保存并右键单击解决方案资源管理器中的 .bas 模块,然后将模块导出到稍后以编程方式加载它的位置。

然后在另一个模块中,编写创建工作簿的过程。在保存新工作簿之前,将导出的模块文件加载到工作簿的VBProject.VBComponents集合中,如下所示:

Dim targetWorkbook As Workbook
'...set up target workbook
targetWorkbook.VBProject.VBComponents.Import "module1.bas"
targetWorkbook.SaveAs "workbook.xls"

编辑

如果您的宏代码需要侦听 Excel 的事件(和/或工作表事件),您还需要添加一个类模块来执行此操作。代码模块需要实例化它才能运行类模块的代码。创建一个新的类模块并将其命名为“clsExcelApp”:

Private WithEvents xlApp As Excel.Application
Option Explicit

Private Sub Class_Initialize()
    Set xlApp = Application
End Sub

Private Sub Class_Terminate()
    Set xlApp = Nothing
End Sub

然后您可以为 编写事件处理程序xlApp,例如:

Private Sub xlApp_SheetActivate(ByVal Sh As Object)
    'do something whenever a worksheet gets activated.
End Sub

Private Sub xlApp_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    'do something before a workbook gets saved.
End Sub

代码模块只需要实例化它,如下所示:

private App As New clsExcelApp
Option Explicit

模块的其余部分可以是宏和/或函数:

Public Sub Macro1()
    'do something
End Sub

Public Function Smurf(Range As Excel.Range) As Long
    'Smurf the Range and then smurf a Long
End Function

然后保存您的辛勤工作并导出所有模块并以编程方式将它们导入到您想要“注入”功能的工作簿中。

注意您应该始终限制对 的访问VBProject,但要执行Excel.Workbook.VBProject.VBComponents.Import(String) 您需要启用的方法。请记住在完成后重新打开安全性 - 安全总比抱歉好!

于 2013-05-30T03:04:14.003 回答