gpt4 book ai didi

vba - 如何从工作簿 B 调用工作簿 A 上的 Workbook_Open?

转载 作者:行者123 更新时间:2023-12-02 16:54:51 24 4
gpt4 key购买 nike

我的情况是,我正在尝试从工作簿 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

参见:http://www.cpearson.com/excel/vbe.aspx

关于vba - 如何从工作簿 B 调用工作簿 A 上的 Workbook_Open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27869616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com