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

Syntax error when passing variable args in macro

我有一个接受 2 个参数的 libreoffice 宏。

  1. 文件路径
  2. 变量参数 sheet 要查找的名称。

我遍历与第一个 arg 相关的文档并获得与第一个变量 arg 匹配的 sheet。然后我将 sheet 转换为 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 个 sheet,第 3 个 sheet 为 DATA,这个 sheet 应该转换为 CSV。

以前我曾经将 sheet idnex 直接赋给宏,并且效果很好。但是要求发生了变化,我必须传入一组可能的名称以进行匹配。因此变量 args.

但现在我遇到语法错误(附截图)。我不知道这里出了什么问题。

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

option compatible

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