1

我正在尝试使用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

4

1 回答 1

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
于 2020-06-03T21:27:53.447 回答