簡體   English   中英

將多頁打印為PDF

[英]Printing multiple pages into PDF

我正在嘗試以PDF格式打印多張紙。 下面是代碼,但它給出了下標超出范圍的錯誤。 請幫忙

  PdfFile = ActiveWorkbook.FullName
  Worksheets("Report").PageSetup.Orientation = xlLandscape
  i = InStrRev(PdfFile, ".")
  If i > 1 Then PdfFile = Left(PdfFile, i - 1)
  PdfFile = "SPC Report " & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf" 'PdfFile & "_" & Worksheets("Report").name & ".pdf"

  ' Export activesheet as PDF
  With Worksheets("Report")
    ThisWorkbook.Sheets(ShtNames).Select
    .ExportAsFixedFormat Type:=xlTypePDF, Filename:="SPC Report " & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    ThisWorkbook.Sheets("Report").Select
  End With

這是我聲明ShtNames並為其分配值的地方。

 Dim ShtNames() As String
  ReDim ShtNames(1 To ActiveWorkbook.Sheets.Count / 2 + 1)
  i = Sheets.Count
  j = 1
  Do While i > Sheets.Count / 2
    ShtNames(j) = Sheets(i).Name
    i = i - 1
    j = j + 1
  Loop

OP的最初問題似乎已經解決。 答案的底部現在包含有關如何反向打印紙張的問題的更新答案。嘗試在聲明ShtNames並為其賦值的代碼中設置j = 0

我沒有在代碼的頂部看到任何索引規范,所以我假設您的數組都是0索引的。

您的Do While循環使用計數器j訪問ShtNames元素,但是,在我看來,您首先訪問該數組的第二個元素(因為ShtNames(0)是第一個元素,而ShtNames(1)是第二個元素)。

我會懷疑,當您嘗試將最后一個工作表名稱分配給ShtNames的最后一個索引時,索引的大小比ReDim最初的大小大1。

要以相反的順序打印紙張,請以相反的順序分配您的ShtNames

Dim ShtNames() As String
  ReDim ShtNames(1 To ActiveWorkbook.Sheets.Count / 2 + 1)
  i = Sheets.Count
  j = UBound(ShtNames)
  Do While i > Sheets.Count / 2
    ShtNames(j) = Sheets(i).Name
    i = i - 1
    j = j - 1
  Loop

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM