Excel加载项从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
和ASM

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”,并将其从项目中删除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Excel加载项从ActiveWorkbook调用子例程

来自分类Dev

使用参数调用Excel VBA子例程

来自分类Dev

在宏中调用Excel加载项功能

来自分类Dev

从宏调用Excel VB加载项

来自分类Dev

R调用Fortran子例程

来自分类Dev

从Python调用Access子例程

来自分类Dev

VBA EXCEL:如何在另一个子例程中调用一个子例程?

来自分类Dev

子例程中调用的子例程中的Application.ScreenUpdating

来自分类Dev

其他功能区按钮的Excel自定义功能区按钮调用子例程

来自分类Dev

子例程在其调用例程的堆栈中写入是否安全?

来自分类Dev

在并行环境中调用子例程

来自分类Dev

从R调用并行的fortran MPI子例程

来自分类Dev

从C调用模块中的子例程

来自分类Dev

Perl线程-从模块(pm)调用子例程

来自分类Dev

调用参数为指针别名的子例程

来自分类Dev

通过动态值调用子例程

来自分类Dev

从C#调用FORTRAN子例程

来自分类Dev

Perl线程-从模块(pm)调用子例程

来自分类Dev

VSTO Excel加载项:从模态窗口窗体调用Excel Inputbox时,焦点移到Visual Studio

来自分类Dev

如何将参数传递给从其他子例程调用的引用子例程

来自分类Dev

当工作簿完成加载时运行子例程?

来自分类Dev

从模块仅加载一个子例程

来自分类Dev

当工作簿完成加载时运行子例程?

来自分类Dev

在OpenMP区域内调用内部子例程

来自分类Dev

定义可以通过方法语法调用的子例程

来自分类Dev

从多个线程调用带有OPEN语句的子例程

来自分类Dev

自动调用作为子例程引用的哈希值

来自分类Dev

如何从“ for”处理过的项目中调用子例程(在“ in”之后)?

来自分类Dev

R使用字符参数调用Fortran子例程

Related 相关文章

热门标签

归档