如何减少从Visual Basic Net应用程序执行时Excel VBA的运行时间?

时间:2018-04-08 15:06:54

标签: .net excel vb.net excel-vba runtime vba

使用的软件: Visual Basic Net 2013 Microsoft Excel 2016

直接从VBA Excel编辑器执行代码与从Visual Basic Net代码执行相同VBA所需的时间相比,我遇到了问题。即使我编写一个简单的

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代码时如何创建新行

1 个答案:

答案 0 :(得分:0)

以下VB.NET代码在我的计算机上正常运行

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.Visible = True
    'oExcel = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application")
    'oBook = GetObject(filePath)
    oBook = oExcel.Workbooks.Open(filePath)
    oSheet = oBook.Worksheets("TestExcel")
    'oSheet.Activate()
    'oBook.RunAutoMacros(1)
    oExcel.Run(macroName)
    oBook.Close(False)
    oExcel.Quit()
End Sub