使用 RDCOMClient 导入和 运行 excel 模块 .bas

import and run excel module .bas with RDCOMClient

我正在尝试使用 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 不使用句点限定符来访问基础方法。但是,对象名称中允许使用句点。所以 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