Почему мои данные печатаются до последнего индекса массива имен моих листов? - PullRequest
1 голос
/ 27 февраля 2020

Я собираю имена рабочих листов в массив, чтобы можно было циклически просматривать файлы в папке и распечатывать их одновременно. Вот код, используемый для создания этого массива:

Option Explicit
Sub Update_Data_And_OPR()
    Dim wbTemplate As Workbook: Set wbTemplate = ThisWorkbook
    Dim wsInputs As Worksheet: Set wsInputs = wbTemplate.Worksheets("Inputs")
    Dim strDate As String: strDate = "02/25/2020" 'InputBox("Please Enter Date of Data (mm/dd/yyyy) : ", Default:=Format(Now, "mm/dd/yyyy"))
    Dim strFolderName As String: strFolderName = "02.25.20" 'InputBox("Please Enter Data Folder Date (mm.dd.yy) Include 0's: ", Default:=Format(Now, "mm.dd.yy"))

    With wbTemplate
        Dim varWsName, i
        Dim ws As Worksheet
        ReDim varWsName(3 To ThisWorkbook.Worksheets.Count)
            For Each ws In ThisWorkbook.Worksheets
                Select Case ws.Name
                    Case "Inputs", "Data --->>>"
                    Case Else
                        i = i + 1
                        varWsName(i) = ws.Name
                End Select
            Next
            wsInputs.Range("B1").Value = strDate
            wsInputs.Range("B2").Value = strFolderName
    End With

Когда я хочу начать печать на моем wbTemplate, i упоминается как последний лист в массиве, и я хочу, чтобы он циклически повторялся вернуться и начать печать с первого значения индекса (первый лист в wbTemplate). Как я могу вернуть его обратно?

Dim BasePath As String: BasePath = "\\com\data\" & strFolderName & "\"
Dim filename As String: filename = Dir(BasePath & "\*.xlsx")
Dim wb As Workbook

    Do While filename <> ""
        Set wb = Workbooks.Open(BasePath & "\" & filename)
        With wb.Worksheets("Sheet1")
            For i = LBound(varWsName) To UBound(varWsName)
                .UsedRange.Offset(1).Copy Destination:=wbTemplate.Worksheets(varWsName(i)).UsedRange.Offset(1)
            Next i
        End With
        wb.Close
    filename = Dir
    Loop
End Sub

Например, Corp - это первый индекс varWsname, но когда он начинает печатать первый файл в BasePath, он печатает его до Corp32, который является последним индексом varWsName.

1 Ответ

0 голосов
/ 27 февраля 2020

Индекс вашего массива начинается с 3. Итак, я должен начать с 3. И вы определили ReDim varWsName (3 To ThisWorkbook.Worksheets.Count), поэтому приведенный выше код должен измениться. я должен начать с 3.

Dim BasePath As String: BasePath = "\\com\data\" & strFolderName & "\"
Dim filename As String: filename = Dir(BasePath & "\*.xlsx")
Dim wb As Workbook
    i = 2
    Do While filename <> ""
        Set wb = Workbooks.Open(BasePath & "\" & filename)
        i = i + 1
        With wb.Worksheets("Sheet1")

                .UsedRange.Offset(1).Copy Destination:=wbTemplate.Worksheets(varWsName(i)).UsedRange.Offset(1)

        End With
        wb.Close
    filename = Dir
    Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...