У меня нет особого опыта работы с VBA, поэтому мне было трудно решить эту проблему. При запуске кода он выводит Array(i<=i)
вместо Array(i)
Я проверил условие for и обнаружил, что Array(0)
правильно возвращает результат. Однако Array(1)
напечатает Array(1)
с Array(0)
и так далее.
Цель этого кода состоит в том, чтобы сгруппировать рабочие листы на основе их имени и распечатать их в формате pdf на основе группировки, то есть всех листов, начиная с I1, в один файл PDF.
Sub Test()
FolderPath = "C:\Example"
Dim aWS()
Dim n As Integer
Dim ws As Worksheet
Dim DocTypes()
DocTypes = Array("I1","I2","I3")
For i = LBound(DocTypes) To UBound(DocTypes)
For Each ws In Worksheets
If Left(ws.Name, 2) = DocTypes(i) Then
n = n + 1
ReDim Preserve aWS(1 To n) 'Add 1 to to array length
aWS(n) = ws.Name 'Add worksheet name meeting If condition
End If
Next ws
Sheets(aWS).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath &
DocTypes(i), _
openafterpublish:=True, ignoreprintareas:=False
Next i
End Sub
То, что я ожидаю, это:
i = 0 to 2
Сначала Array(i) = "I1"
, поэтому выведите все листы, начинающиеся с "I1", в формате pdf
Затем перейдите к i = 1
Здесь Array(i) = "I2"
, поэтому выведите все листы, начинающиеся с "I2", в формате pdf
Однако, когда я делаю шаг вперед, кажется, что он не следует этой логике, и я не понимаю, почему. Я думаю, что это связано с выбором, из этого следует, что, если был выбран i=0
, то к выбору был добавлен i=1
, эта проблема имела бы смысл. Я пытался повторно выбрать один лист прямо перед Next i
, чтобы пропустить это, но это не сработало. Это заставляет меня думать, что я допустил логическую ошибку в своих циклах for.