#excel #vba #pdf
#excel #vba #PDF
Вопрос:
У меня возникла проблема при создании файла .pdf из разных, не предопределенных чисел листов.
Логика: нажмите Button1 — создается новый лист (сотрудник x), например, вы создаете 3 разных листа для своих сотрудников.
Итак, я хочу создать файл .pdf только из этих 3 листов.
For-Loop выдает мне эту строку: «Worker1», «Worker2», «Worker3»
Если я помещу эту строку (mystring) в :
Sheets(Array(**mystring**)).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath amp; "Sales", _
openafterpublish:=False, ignoreprintareas:=False
Я получаю сообщение об ошибке:
Ошибка времени выполнения ‘9’: индекс вне диапазона.
В противном случае, если я вставлю строки вручную, это сработает. Но это не предопределено, сколько у вас сотрудников и как их зовут.
Sheets(Array("Worker1", "Worker2", "Worker3", ... ,"Workerx")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath amp; "Sales", _
openafterpublish:=False, ignoreprintareas:=False
У кого-нибудь есть идеи, как это исправить?
Комментарии:
1.
For-Loop gives me this String: "Worker1", "Worker2", "Worker3"
— это 3 строки, а не одна… Это помогло бы опубликовать остальную часть кода, включаяFor
цикл2. У меня есть таблица с именами всех сотрудников, и я создаю из них строку.
3. Если вы создаете строку как «Worker1, Worker2, Worker3», вы можете использовать
Sheets(Split(myString, ",")).Select
Ответ №1:
Если вы создаете строку как «Worker1, Worker2, Worker3», вы можете использовать Split(myString, ",")
ее для создания массива.
Что-то вроде этого:
Option Explicit
Private Sub CommandButton1_Click()
Dim stringname As String, wb As Workbook, ws As Worksheet, i As Long, sep As String
Set wb = ThisWorkbook 'or ActiveWorkbook
Set ws = wb.Worksheets("MitarbeiterListe")
For i = 6 To 106
If ws.Range("B" amp; i) <> "" Then
stringname = stringname amp; sep amp; ws.Range("B" amp; i) amp; " " amp; ws.Range("C" amp; i)
sep = "," 'populate separator after first item
End If
Next i
MsgBox stringname
ThisWorkbook.Sheets(Split(stringname, ",")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath amp; "Sales", _
openafterpublish:=False, ignoreprintareas:=False
MsgBox "All PDF's have been successfully exported."
End Sub
Ответ №2:
**FULLCODE**
Private Sub CommandButton1_Click()
Dim forename As String
Dim lastname As String
Dim fullname As String
Dim stringname As String
For i = 0 To 100
If Sheets("MitarbeiterListe").Range("B" amp; 6 i) <> "" Then
forename = Sheets("MitarbeiterListe").Range("B" amp; 6 i)
lastname = Sheets("MitarbeiterListe").Range("C" amp; 6 i)
fullname = Chr(34) amp; forename amp; " " amp; lastname amp; Chr(34)
stringname = stringname fullname amp; ", "
End If
Next i
stringname = Left(stringname, Len(stringname) - 2)
MsgBox stringname
Sheets(Array(stringname)).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath amp; "Sales", _
openafterpublish:=False, ignoreprintareas:=False
MsgBox "All PDF's have been successfully exported."
End Sub
Комментарии:
1. Пожалуйста, отредактируйте свой вопрос при добавлении кода или другого содержимого — не публикуйте в качестве ответа.
2. о, извините, я этого не знал