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