Я относительно новичок в VBA и учусь по ходу дела - был бы очень признателен, если бы кто-то мог пролить свет на дилемму, на которой я застрял в течение нескольких недель.
У меня есть несколько файлов Excel, каждый из которых содержит 2 листа («Форма» и «Детали»).Ячейки на листе «Форма» заполняются на основе списка значений в «Сведениях» (например, имя, фамилия, дата и т. Д.) Для автоматического предварительного заполнения (через vlookup и т. Д.).
До сих пор у меня был макрос, назначенный файлу для распечатки каждой новой "Формы" на другой странице, как показано ниже.
Sub PrintForm()
Dim i As Long
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("Details")
Set ws2 = Sheets("Form")
' 2 assumes a header row - use 1 if there isn't one
For i = 2 To ws1.Cells(Rows.Count, "A").End(xlUp).Row
With ws2
' Populate the Forms sheet with employee names
.Range("B2").Value = ws1.Cells(i, "A").Value
.PrintOut
End With
Next i
End Sub
Этот код работал нормальнооднако до сих пор, вместо того, чтобы печатать около 100 «форм» листов в неделю, я пытался выяснить, как сохранить каждую из этих «форм» в PDF и сохранить ее в папке (по сути, распечатав каждую форму, нокак цифровая копия).
Я на полпути (я думаю).При выполнении кода ниже, он отлично работает на одном файле (печать около 7 форм).Но в другом файле с большим листом «Подробности» он возвращает либо сообщение «400» с красным крестиком, либо запускает только первые 20 значений (только иногда).Не уверен, что это значит или как я могу это исправить.
Sub PrintForm()
Dim i As Long
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("Details")
Set ws2 = Sheets("Form")
' 2 assumes a header row - use 1 if there isn't one
For i = 2 To ws1.Cells(Rows.Count, "A").End(xlUp).Row
With ws2
' Populate the Forms sheet with employee names
.Range("B2").Value = ws1.Cells(i, "A").Value
.ExportAsFixedFormat _
Type:=x1TypePDF, _
Filename:="C:\Archive\Forms\" & .Range("B2") & ".pdf", _
Quality:=x1QualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
End With
Next i
End Sub
Буду признателен за любой вклад.Дайте мне знать, если я могу что-нибудь сделать, чтобы объяснить проблему дальше.