Требуется помощь в устранении ошибки «Subscript out of range» при попытке прочитать строки с начальными пробелами - PullRequest
0 голосов
/ 05 апреля 2019

Я автоматизирую экспорт многих файлов 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

1 Ответ

0 голосов
/ 05 апреля 2019

Sheets(Split(sheetList, ",")).Select должно было быть Sheets(sList).Select. Я уже сделал это изменение, поэтому я не думал дважды проверять эту часть своего кода. Спасибо Гостю за указание на мою ошибку.

...