Я автоматизирую экспорт многих файлов Excel в PDF.Эти файлы являются нашими Таблицами данных о помещении, которые могут иметь 3-5 вкладок для проверки данных, но только первая и иногда вторая вкладки - это то, что нужно экспортировать.Вместо того, чтобы жестко кодировать имена листов, я хотел проверить макрокоманду в будущем, позволив использовать разделенный запятыми список, чтобы определить, какие вкладки в наборе файлов одинакового формата (в случае его использования на чем-то отличном от комнаты).таблицы данных), или экспортировать весь файл, если список не был предоставлен.У меня это работает для содержимого ячейки «ROOM DATA SHEET, FLOOR PLAN», но в случае другого пользователя, набирающего список более грамматически правильным способом, я начал анализировать / обрезать список, чтобы также принять «ROOM DATA SHEET, FLOOR»ПЛАН".Тем не менее, мой код выдает мне ошибку «Subscript out of range» при вводе последнего списка.
Используемый мной метод парсинга - сначала разбить строку, а затем обрезать содержимоерезультирующий массив строк для удаления любых начальных и конечных пробелов.Хотя цикл For i = 0 To ... не является проблемой из-за частичного успеха макроса в первом списке, я также попытался переключиться на цикл For Each безрезультатно.Я также попробовал шаблоны Trim (), VBA.LTrim () и regex (вы можете увидеть мою попытку регулярного выражения, закомментированную в приведенном ниже коде).
Я также отслеживал вывод каждого метода синтаксического анализа в ячейкахA9 и A10, чтобы убедиться, что обрезка функционирует должным образом, и для Trim () и VBA.LTrim () результирующие строки не имеют начальных или конечных пробелов, как и ожидалось.В этих случаях массив должен иметь те же строки, что и первый список в соответствии с выходными данными A9 и A10, но сохранение элементов обратно в массив, по-видимому, вызывает ошибку вне диапазона для массива или строк внутри.Любые предложения будут высоко ценится.
Вот вопрос, о котором идет речь:
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