首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用.bas导入和运行excel模块RDCOMClient

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

Stack Overflow用户
提问于 2020-06-03 19:44:06
回答 1查看 338关注 0票数 1

我试图使用RDCOMClient将一个模块导入到excel工作簿中。

代码语言:javascript
复制
xlApp <- COMCreate("Excel.Application")
XlWbk <- xlApp$Workbooks()$Open(paste0(root, "test.xlsx"))
xlWbk.VBProject.VBComponents.Import(paste0(root, "macro/Module1.bas"))

最后一行给出了错误:

代码语言:javascript
复制
 could not find function "xlWbk.VBProject.VBComponents.Import"

我还尝试了以下几点:

代码语言:javascript
复制
xlApp$Run(paste0(root, "macro/Module1.bas!header"))
xlApp$Modules()$AddFromFile(paste0(root, "macro/Module1.bas"))

上述两种代码也不起作用。

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

编辑?

以下是.bas的内容

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-03 21:27:53

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

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

代码语言:javascript
复制
xlApp <- COMCreate("Excel.Application")
xlWbk <- xlApp$Workbooks()$Open(paste0(root, "test.xlsx"))

xlWbk$VBProject()$VBComponents()$Import(paste0(root, "macro/Module1.bas"))

VBA中的对应方将为方法使用期间限定符:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62181438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档