簡體   English   中英

Excel加載項從ActiveWorkbook調用子例程

[英]Excel Add-in to call subroutine from ActiveWorkbook

我創建了一個加載項,可將工作表添加到工作簿並導入多個模塊。 然后,我希望外接程序運行Active Workbook中現在存在的子例程。 到目前為止,這就是我所得到的,並且出現運行時錯誤“ 438”:對象不支持此屬性或方法。

正確的語法是什么(如果可以做到的話)。 謝謝。

' Class name is EventClassModule
Public WithEvents App As Application
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    If Wb.Name = "Just To Test.xls" Then
        Wb.Sheets.Add Type:="C:\TestGLPage.xls"
    fname = Dir("C:\Users\Me\Desktop\BAS\*.*", vbNormal)
    While fname <> ""
       If Right(fname, 3) = "frm" Or Right(fname, 3) = "bas" Or Right(fname, 3) = "cls" Then
       ActiveWorkbook.VBProject.VBComponents.Import "C:\Users\Me\Desktop\BAS\" & fname
       End If
       fname = Dir()  'get the next file
    Wend
    Call Application.Workbooks("Just To Test.xls").starter
    End If
End Sub

VBA 不是動態語言。 在運行時更改代碼或代碼對象的名稱時,VBA必須重新編譯這些模塊,然后才能訪問更改。 進行此類更改后,您可能還會發現斷點無法正常工作。

這種重新編譯會立即自動進行,但是無法從已經執行的代碼中進行訪問。 您需要獲取Excel才能重新輸入VBA代碼。

您可能可以使用Application.Run,​​但是如果您不需要啟動程序作為阻塞調用(在示例代碼中就是這種情況),我可能會使用Application.OnTime來提高安全性。

為了清楚起見,在使用Application.Run或Application.OnTime調用子例程時,不能使用模塊名稱對其進行限定。 但是,您可以使用bang語法使用工作簿的名稱對其進行限定。 例如。 Application.Run "Book1.xlsx!SubNameToBeCalled"

我創建了一個空白工作簿,並創建了兩個模塊

進口

Public Sub RunMe()
    MsgBox "Test!"
End Sub

主要

Public Sub Run()
  ActiveWorkbook.VBProject.VBComponents.Import "C:\Temp\Imported.bas"
  ' Showing how to do it with Run
  Application.Run ThisWorkbook.Name & "!RunMe"
  ' Showing the safer way with OnTime
  Application.OnTime Now, ThisWorkbook.Name & "!RunMe"
End Sub

然后,我將“導入的”模塊導出到“ C:\\ Temp \\ Imported.bas”,並將其從項目中刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM