Как я могу перенести файлы из папки в последовательно готовые рабочие листы в моей рабочей книге? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть папка, в которую нужно внести 29 файлов в 29 листов в шаблоне wb. Всего 31 лист, но мне нужно начать размещать их после листа 2.

Сначала я помещаю соответствующие имена листов в массив:

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

'place wbTemplate sheet names into an array
With wbTemplate
    Dim varWsName, i
    Dim ws As Worksheet
    ReDim varWsName(1 To Sheets.Count)
            For i = 1 To Sheets.Count
            Select Case ws.Name
                Case "Inputs", "Data --->>>"
                Case Else
                ws(i) = ThisWorkbook.Sheets(i).Name
            End Select
            Next
        .wsInputs.Range("B1").Value = strDate
        .wsInputs.Range("B2").Value = strFolderName
End With

, получая object variable or with block not set на этом строка: выберите Case ws.Name

, а затем я хочу знать, будет ли эта строка правильно начинать размещение первого файла в папке на листе 1 после оператора case, а затем второй файл будет помещен на лист 2 и пр.:

        With wb.Worksheets("Sheet1")
            .UsedRange.Copy Destination:=wbTemplate.Worksheets(varWsName(i))
        End With

Остальной код:

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 = InputBox("Please Enter Date of Data (mm/dd/yyyy) : ", Default:=Format(Now, "mm/dd/yyyy"))
    Dim strFolderName As String: strFolderName = InputBox("Please Enter Data Folder Date (mm.dd.yy) Include 0's: ", Default:=Format(Now, "mm.dd.yy"))

    'place wbTemplate sheet names into an array
    With wbTemplate
        Dim varWsName, i
        Dim ws As Worksheet
        ReDim varWsName(1 To Sheets.Count)
                For i = 1 To Sheets.Count
                Select Case ws.Name
                    Case "Inputs", "Data --->>>"
                    Case Else
                    ws(i) = ThisWorkbook.Sheets(i).Name
                End Select
                Next
            .wsInputs.Range("B1").Value = strDate
            .wsInputs.Range("B2").Value = strFolderName
    End With

    'compile all files in folder into wbTemplate
    Dim filePath As String: filePath = strFolderName & "*.xlsx"
    Dim fileName As String: fileName = Dir(filePath)
    Dim wb As Workbook
    Dim k As Long
        Do While fileName <> ""
            Set wb = Workbooks.Open(strFolderName & fileName)

            With wb.Worksheets("Sheet1")
                .UsedRange.Copy Destination:=wbTemplate.Worksheets(varWsName(i))
            End With
            wb.Close
        fileName = Dir
        Loop

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...