在宏中传递变量 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 时出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 Range 类在 VBA 中创建宏时出现运行时错误 1004