作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的情况是,我正在尝试从工作簿 B 打开工作簿 A 并运行 Workbook_Open 子例程。仅使用 Workbooks.Open("c:\myworkbook.xls")
的问题是,我需要在 Workbook_Open
子例程运行之前将数据植入工作簿 A 中。
我有两个想法,但我都不是特别喜欢,所以我想知道是否有更好的方法。我的两个想法如下。
选项 1:在禁用宏的情况下打开工作簿 A,植入数据,保存并关闭工作簿,然后在启用宏的情况下重新打开它。我不想这样做的原因是:我我正在处理一个具有大量格式的 .xls 文件(基本上我是在模拟人类如何使用它数千次),并且保存文件数千次可能会导致文件损坏。此外,这需要相当长的时间来打开工作簿两次,而且对我来说似乎一点效率都没有。重点之一是速度和效率以及最快的周转时间。
选项 2:将 Workbook_Open 代码复制为模块内其他位置的公共(public)子例程。这是两者中更理想的一个,但问题是我不一定有权执行此操作这样做会涉及大量的繁文缛节、危险信号等。
有没有办法做这样的事情:
Workbooks("Workbook A").Application.Run (Workbooks("Workbook A").Workbook_Open)
最佳答案
来自工作簿 B:
'add vb reference to "Microsoft Visual Basic For Applications Extensibility 5.3"
Sub Tester()
Dim wb As Workbook
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim LineNum As Long
Set wb = Workbooks("BookA.xlsm")
Set VBProj = wb.VBProject
Set VBComp = VBProj.VBComponents("ThisWorkbook")
Set CodeMod = VBComp.CodeModule
With CodeMod
LineNum = .CountOfLines + 1
.InsertLines LineNum, "Public Sub Blah()"
LineNum = LineNum + 1
.InsertLines LineNum, " Workbook_Open"
LineNum = LineNum + 1
.InsertLines LineNum, "End Sub"
End With
Application.Run "BookA.xlsm!ThisWorkbook.Blah"
End Sub
关于vba - 如何从工作簿 B 调用工作簿 A 上的 Workbook_Open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27869616/
我是一名优秀的程序员,十分优秀!