从R中启动VBA宏

12 浏览
0 Comments

从R中启动VBA宏

我目前正在尝试从R中启动一个非常简单的VBA宏。为此,我正在按照这里找到的步骤进行操作:Run VBA script from R。不幸的是,当我打开Excel文件后,它会出现损坏并停止运行。以下是我的代码:

R:

library(XLConnect)
saveWorkbook(wb, pathfile)
# saveWorkbook部分正常工作
shell(shQuote(normalizePath(pathtovbs)), "cscript", flag = "//nologo")


Vbscript:

Option Explicit
On Error Resume Next
ExcelMacroExample
Sub ExcelMacroExample() 
  Dim xlApp 
  Dim xlBook 
  Set xlApp = CreateObject("Excel.Application") 
  Set xlBook = xlApp.Workbooks.Open(pathfile, 0, True) 
  xlApp.Run "PERSONAL.XLSB!MyMacro"
  xlApp.Quit 
  Set xlBook = Nothing 
  Set xlApp = Nothing 
End Sub


VBA PESONAL.XLSB!MyMacro:

Sub MyMacro()
 Dim ws As Worksheet
    For Each ws In Sheets
       ws.Range("C:C").EntireColumn.Delete
       ws.Range("A:A").EntireColumn.Delete
   Next ws
End Sub

你有任何想法发生了什么?我已经检查了每个文件的路径,它们都是正确的。非常感谢您的帮助。

编辑:显然,问题出在vbscript上。文件打开了,但它找不到我的个人库(PERSONAL.XLSB)中的宏。当我手动打开Excel时,我可以访问这个宏,但当我从其他程序打开Excel时,我不能。有什么想法为什么会这样?

保琳

0
0 Comments

问题出现的原因是在.vbs文件中,未定义了pathfile变量。在下面的代码中,pathfile变量未定义:

Set xlBook =     xlApp.Workbooks.Open(pathfile, 0, True)

而且,在代码中使用了“On Error Resume Next”语句来隐藏所有错误。这会导致错误被忽略,从而无法定位和解决问题。

解决方法是:

1. 在.vbs文件中定义pathfile变量。可以通过在代码中添加以下语句来定义变量:

pathfile = "your_file_path"

2. 删除“On Error Resume Next”语句,以便能够捕获和处理错误。这样可以查看错误消息,并解决由于.Open调用的参数问题导致的错误。

下面是修复问题的示例代码:

pathfile = "your_file_path"
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(pathfile, 0, True)

感谢您的回答。pathfile变量在vbscript中是硬编码的。我在帖子中更改了它,以便您无法读取完整路径。我添加了“On Error Resume Next”语句,但现在文件是空的...

哦,是的,我现在明白您的意思了。我得到了“未知执行错误”的错误消息(从法语翻译而来)。

0
0 Comments

问题出现的原因是在调用 VBA 宏之前,没有先保存并关闭 Workbook。解决方法是在调用 VBA 宏之前添加保存和关闭 Workbook 的代码,并且移除 On Error Resume Next 语句以便查看错误信息。此外,需要注意的是,在 VBScript 中使用 xlBook.Close SaveChanges:=False 会导致错误。

0