【发布时间】:2018-04-08 15:06:54
【问题描述】:
使用的软件: Visual Basic 网络 2013 , Microsoft Excel 2016
与从 Visual Basic Net 代码执行相同 VBA 所需的时间相比,直接从 VBA Excel 编辑器执行代码时我遇到了问题。即使我编写了一个简单的代码
Sub myCode()
MsgBox "Hello World!", vbOkOnly
End Sub
在 VBA 中,当我从 Visual Basic 代码执行时开始执行需要花费太多时间。
例如,当我在 VBA 编辑器中按“F5”键时,执行代码并显示 MsgBox 只需不到一秒钟的时间。当我从 Visual Basic .Net 运行完全相同的代码时,开始执行代码大约需要 30 秒。
我在 Visual Basic 中使用的代码如下:
Private Sub executeExcelMacro(ByVal filePath As String, ByVal macroName As String)
Dim oExcel As Excel.Application
Dim oBook As Excel.Workbook
Dim oSheet As Excel.Worksheet
oExcel = New Excel.Application
oExcel = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"), Excel.Application)
oBook = GetObject(filePath)
oSheet = oBook.Worksheets("TestExcel")
oSheet.Activate()
oBook.RunAutoMacros(1)
oExcel.Run(macroName)
End Sub
这个想法是在 Excel 2016 中打开一个 Excel 文件并使用 VBA 代码自动更新其内容,这样我就可以看到每次从 Visual Basic .Net 自动执行 VBA 代码时如何创建一个新行
【问题讨论】:
-
但是你运行的代码并不完全相同。
-
嗨 Storax,在这个问题中,我展示了我最终运行的代码。但是我已经直接从 VBA 和 VB.Net 运行 Hello World 代码,如果我尝试从 VB.Net 执行 Hello World 大约需要 30 秒才能运行。如果我从 VB.Net 启动它,我不知道是什么导致任何 VBA 代码的执行速度变慢。一旦 VBA 启动,完成任务需要相同的时间。问题在于 VB.Net 尝试执行 VBA 代码和 VBA 代码的执行开始之间。大约需要 30 秒,我不知道为什么。
-
对不起,但是 IMO 您的代码根本无法运行,因为您启动了一个新的 excel 实例并尝试将其分配给自身,然后将
obook分配给一个新实例。oexcel.run行应该会引发运行时错误。
标签: .net vb.net excel runtime vba