【问题标题】:import and run excel module .bas with RDCOMClient使用 RDCOMClient 导入并运行 excel 模块 .bas
【发布时间】:2020-06-03 19:44:06
【问题描述】:

我正在尝试使用 RDCOMClient 将模块导入 Excel 工作簿。

xlApp <- COMCreate("Excel.Application")
XlWbk <- xlApp$Workbooks()$Open(paste0(root, "test.xlsx"))
xlWbk.VBProject.VBComponents.Import(paste0(root, "macro/Module1.bas"))

最后一行给出了错误:

 could not find function "xlWbk.VBProject.VBComponents.Import"

我还尝试了以下方法:

xlApp$Run(paste0(root, "macro/Module1.bas!header"))
xlApp$Modules()$AddFromFile(paste0(root, "macro/Module1.bas"))

上面的两个代码也没有工作。

谁能帮我导入这个模块?我使用 R 生成这个 excel 宏,将它们复制并粘贴到 excel 文档中并手动运行宏真的很痛苦。

编辑---------

这是.bas的内容

Attribute VB_Name = "Module1"
Sub Macro2()
Attribute Macro2.VB_ProcData.VB_Invoke_Func = " \n14"
'
' Macro2 Macro
'
    Range("I6").Select
    ActiveCell.FormulaR1C1 = "hello"
    Range("I7").Select
End Sub

【问题讨论】:

    标签: r excel vba rdcomclient


    【解决方案1】:

    R 不使用句点限定符来访问底层方法。但是,对象名称中允许使用句点。所以 R 试图找到一个名为 xlWbk.VBProject.VBComponents.Import() 的函数。

    在 VBA 或 VBS 中,句点意味着访问属性和属性,而在 R 中,您需要使用 [[$ 限定符进行调整。因此,考虑调整到 R 语义:

    xlApp <- COMCreate("Excel.Application")
    xlWbk <- xlApp$Workbooks()$Open(paste0(root, "test.xlsx"))
    
    xlWbk$VBProject()$VBComponents()$Import(paste0(root, "macro/Module1.bas"))
    

    VBA 中的对应物将使用句点限定符来表示方法:

    Public Sub ImportModuleCheck()
    On Error Goto ErrHandle
       ThisWorkbook.VBProject.VBComponents.Import "C:\Path\To\macro\Module1.bas"
    
       Msgbox "Module successfully imported!", vbInformation
       Exit Sub
    
    ErrHandle:
       Msgbox Err.Number & " - " & Err.Description, vbCritical
       Exit Sub
    End Sub
    

    【讨论】:

    • 非常感谢您的回复!我收到一个错误,没有提示为什么它会导致错误:xlWbk$VBProject()$VBComponents()$Import(paste0(root, "macro/Module1.bas")) Error: Exception occurred. 我在操作中添加了信息。
    • root的内容是什么? .bas 文件是否位于子文件夹 macro 中?请注意,您在工作簿对象中使用大写 X。我在xlWbk 中使用小写xxlApp 保持一致。
    • 嗯...您运行的是哪个版本的 MS Office?你是在 Windows 还是 Mac 上?起初我以为是.xlsx 不能保存任何宏(但.xlsm 可以)是问题,但即使您应该提示您使用后台 Excel 进程。你是如何运行 R 脚本的?命令行,IDE 像 RStudio,其他?
    • 查看显示 VBA 对应的答案扩展。运行该宏(调整路径)并描述代码是否正常工作或出错,如果出错,确切的消息是什么。
    • 你有它!那应该是你的问题。 Adjust trust settings Excel 文件或移动工作目录。事实上,由于这个错误,您应该无法运行任何 VBA 宏(即,无论您尝试导入什么)。
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2011-08-14
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多