首页 > 解决方案 > VBA:使用字符串创建 PDF 文件

问题描述

我在用不同的未预定义张数创建 .pdf 文件时遇到问题。

逻辑: 按 Button1 - 创建一个新工作表(员工 x),例如,您为员工创建 3 个不同的工作表。

所以,我只想从这 3 张纸中创建一个 .pdf 文件。

For-Loop 给了我这个字符串:“Worker1”、“Worker2”、“Worker3”

如果我将此字符串(mystring)放入:

Sheets(Array(**mystring**)).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath & "\Sales", _
    openafterpublish:=False, ignoreprintareas:=False

我得到错误: 运行时错误'9':下标超出范围。

否则,如果我手动插入字符串,它会起作用。但是,您有多少员工以及他们的名字是没有预定义的。

Sheets(Array("Worker1", "Worker2", "Worker3", ... ,"Workerx")).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath & "\Sales", _
        openafterpublish:=False, ignoreprintareas:=False

有人知道如何解决这个问题吗?

标签: excelvbapdf

解决方案


如果您将字符串创建为“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" & i) <> "" Then
            stringname = stringname & sep & ws.Range("B" & i) & " " & ws.Range("C" & i)
            sep = "," 'populate separator after first item
        End If
    Next i
      
    MsgBox stringname
    
    ThisWorkbook.Sheets(Split(stringname, ",")).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath & "\Sales", _
                                    openafterpublish:=False, ignoreprintareas:=False
       
    MsgBox "All PDF's have been successfully exported."

End Sub

推荐阅读