在宏中传递变量 args 时出现语法错误

Posted

技术标签:

【中文标题】在宏中传递变量 args 时出现语法错误【英文标题】:Syntax error when passing variable args in macro 【发布时间】:2020-05-19 12:17:38 【问题描述】:

我有一个用于 libreoffice 的宏,它接受 2 个参数。

    文件路径 作为要查找的工作表名称的变量 args。

我遍历与第一个 arg 相关的文档并获取与第一个变量 arg 匹配的工作表。然后我将该表转换为 CSV。



Sub ExportToCsv(URL as String, ParamArray sheetNames() As Variant)
  Dim saveParams(1) as New com.sun.star.beans.PropertyValue
  saveParams(0).Name = "FilterName"
  saveParams(0).Value = "Text - txt - csv (StarCalc)"
  saveParams(1).Name = "FilterOptions"
  saveParams(1).Value = "44,34,0,1,1" ' 44=comma, 34=double-quote

  GlobalScope.BasicLibraries.loadLibrary("Tools")
  URL = ConvertToURL(URL)
  document = StarDesktop.loadComponentFromUrl(URL, "_blank", 0,  Array())

  baseName = Tools.Strings.GetFileNameWithoutExtension(document.GetURL(), "/")
  directory = Tools.Strings.DirectoryNameoutofPath(document.GetURL(), "/")

  sheets = document.Sheets
  sheetCount = sheets.Count
  Dim x as Integer
  Dim requiredSheetIndex as Integer
  For x = 0 to sheetCount -1
    sheet = sheets.getByIndex(x)
    sheet.isVisible = True
    For i = LBound(sheetNames) To UBound(sheetNames)
      If StrComp(sheet.Name, sheetNames(i), vbTextCompare) = 0 Then
        requiredSheetIndex = x
      End If
    Next
  Next

  currentSheet = document.GetCurrentController.GetActiveSheet()
  sheet = sheets(requiredSheetIndex)
  document.GetCurrentController.SetActiveSheet(sheet)
  filename = directory + "/" + baseName + ".csv"
  fileURL = convertToURL(Filename)
  document.StoreToURL(fileURL, saveParams())
  document.close(True)
End Sub

例如。 ExportToCsv(<path>, 'Data')。假设文档有 4 张表,第 3 张表为DATA,则该表应转换为 CSV。

以前我曾经将工作表 idnex 直接放入宏中,并且效果很好。但是要求发生了变化,我必须传入一组可能的名称来匹配。因此变量 args。

但现在我收到了一个语法错误(附有屏幕截图)。我无法弄清楚这里出了什么问题。

【问题讨论】:

你不需要Sub ExportToCsv(URL as String, sheetNames As Variant) 吗?或者因为你在libreoffice 上,至少去掉sheetNames() 的括号(不确定ParamArray 是什么)。 宏标签上写着“不要用于 VBA”,所以被删除了。 好的。我不知道。谢谢 @jamheadart 我不太熟悉 vba。我以此作为参考 - https://***.com/questions/14716385/variable-argument-list-with-visual-basic 【参考方案1】:

我相信它在抱怨 ParamArray 关键字。经过一番挖掘,我发现您需要包括:

option compatible

在您的模块顶部。更多信息,您可以refer to this link。

【讨论】:

这行得通。谢谢。我仍然面临其他领域的问题,但现在编译成功了。

以上是关于在宏中传递变量 args 时出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章

传递参数时出现GraphQL语法错误

使用 Range 类在 VBA 中创建宏时出现运行时错误 1004

在参数中添加变量时出现语法错误

为 elixir 项目编译牛仔时出现语法错误

Oracle PL/SQL:在 SAMPLE 子句中使用变量时出现语法错误

在连接上更新时出现MS Access语法错误