VBA: используйте строку для создания файла PDF

#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. о, извините, я этого не знал