【问题标题】:VBA : use String for create a PDF fileVBA:使用字符串创建 PDF 文件
【发布时间】:2020-10-05 23:36:50
【问题描述】:

我在使用不同数量的非预定义纸张创建 .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

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

【问题讨论】:

  • For-Loop gives me this String: "Worker1", "Worker2", "Worker3" - 这是 3 个字符串,而不是一个......这将有助于发布其余代码,包括 For 循环
  • 我有一个包含所有员工姓名的表格,并从中创建一个字符串。
  • 如果您将字符串创建为“Worker1,Worker2,Worker3”,您可以使用Sheets(Split(myString, ",")).Select

标签: excel vba pdf


【解决方案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" & 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

【讨论】:

    【解决方案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" & 6 + i) <> "" Then
        forename = Sheets("MitarbeiterListe").Range("B" & 6 + i)
        lastname = Sheets("MitarbeiterListe").Range("C" & 6 + i)
        fullname = Chr(34) & forename & " " & lastname & Chr(34)
        
        stringname = stringname + fullname & ", "
        
    End If
    Next i
        stringname = Left(stringname, Len(stringname) - 2)
        MsgBox stringname
    
    
    Sheets(Array(stringname)).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath & "\Sales", _
    openafterpublish:=False, ignoreprintareas:=False
       
    MsgBox "All PDF's have been successfully exported."
    End Sub
    

    【讨论】:

    • 请在添加代码或其他内容时编辑您的问题 - 不要作为答案发布。
    • 哦抱歉我不知道
    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 2014-12-12
    • 1970-01-01
    • 2022-11-22
    • 2014-04-12
    • 1970-01-01
    • 2020-01-18
    • 2019-07-01
    相关资源
    最近更新 更多