我正在自动将许多Excel文件导出为PDF。这些文件是我们的房间数据表,可能有3-5个标签用于数据验证,但只有第一个,有时是第二个标签是需要导出的标签。我想通过允许使用逗号分隔列表来确定相同格式的文件集中的哪些选项卡(如果它用于除了房间之外的其他事件),而不是硬编码工作表名称。数据表),或者如果没有提供列表则导出整个文件。我有它为“ROOM DATA SHEET,FLOOR PLAN”的单元格内容工作,但是在另一个用户以更加语法正确的方式键入列表的情况下,我开始解析/修剪列表也接受“ROOM DATA SHEET,FLOOR计划”。但是,我的代码在输入后一个列表时给出了“下标超出范围”错误。
解析我正在使用的方法是首先拆分字符串,然后修剪结果字符串数组的内容以删除任何前导和尾随空格。虽然For i = 0 To ...循环似乎不是问题,因为宏在第一个列表中取得了部分成功,但我也尝试切换到For Each循环无效。我也尝试过Trim(),VBA.LTrim()和正则表达式模式(你可以看到我的正则表达式尝试在下面的代码中注释掉了)。
我还跟踪单元格A9和A10中每个解析方法的输出,以确保修剪功能正常,对于Trim()和VBA.LTrim(),结果字符串没有前导或尾随空格,如预期的那样。在这些情况下,根据A9和A10的输出,数组应该与第一个列表具有相同的字符串,但是将元素保存回数组似乎会导致数组或字符串内的超出范围错误。任何建议将不胜感激。
这是有问题的Sub:
Sub ProcessFolders(strPath As String, sheetList As String)
Dim objFileSystem As Object
Dim objFolder As Object
Dim objFile As Object
Dim objExcelFile As Object
Dim objWorkbook As Excel.Workbook
Dim strWorkbookName As String
Dim sList As Variant
If Len(sheetList) > 0 Then
sList = Split(sheetList, ",")
For i = 0 To UBound(sList)
sList(i) = VBA.LTrim(sList(i))
' Set regEx = CreateObject("VBScript.RegExp")
' regEx.Pattern = "^\S*\."
' sList(i) = regEx.Replace(sList(i), "")
Next i
End If
Range("A9").Value = sList(0)
Range("A10").Value = sList(1)
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFileSystem.GetFolder(strPath)
For Each objFile In objFolder.Files
strFileExtension = objFileSystem.GetExtensionName(objFile)
If LCase(strFileExtension) = "xls" Or LCase(strFileExtension) = "xlsx" Then
Set objExcelFile = objFile
Set objWorkbook = Application.Workbooks.Open(objExcelFile.Path)
strWorkbookName = Left(objWorkbook.Name, (Len(objWorkbook.Name) - Len(strFileExtension)) - 1)
If sheetList = "" Then
objWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPath & strWorkbookName & ".pdf"
Else
Sheets(Split(sheetList, ",")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPath & strWorkbookName & ".pdf"
End If
objWorkbook.Close False
End If
Next
End Sub
Sheets(Split(sheetList, ",")).Select
应该是Sheets(sList).Select
。我已经做了这个改变,所以我没想到要仔细检查我的代码的这一部分。感谢Guest指出我的错误。