2017-08-14 115 views
0

我试图以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 
+0

我已经编辑您的回复的问题。另外,ShtNames中的单个数组变量是正确的,ShtNames(1),ShtNames(2)都可以正常工作,但无法在单个select语句中选择给定的表单。 –

+0

https://stackoverflow.com/questions/14404650/save-multiple-sheets-to-pdf – Luuklag

+0

可能重复[保存多张PDF到.pdf](https://stackoverflow.com/questions/14404650/save-multiple -sheets-to-pdf) – Wolfie

回答

0

从OP最初的问题似乎已经解决。更新回答关于如何打印反向张现在的问题是在包含答案的底部 尝试在代码中设置j = 0在您申报ShtNames和值分配给它:

我没有看到任何索引规范在你的代码的顶部,所以我假设你的数组都是0索引。

Do While循环使用计数器j访问的元素在你的ShtNames - 阵列,但是,在我看来,你开始通过访问数组的第二个元素(如ShtNames(0)是第一要素,而ShtNames(1)是第二元件)。

我会怀疑,当你尝试将最后一个工作表名称分配给ShtNames-阵列的最后一个索引时,你的索引1大于最初的ReDim

要以相反的顺序打印纸,指定您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 
+0

是的。我知道了并解决了它。但我有一个问题。我想根据ShtNames数组中的顺序来打印页面(即)PDF应该是相反的。最后一页应该是第一页,最后一页是第一页。感谢这里的帮助。 –

+0

我建议按相反顺序指定你的'ShtNames',例如: 'j = UBound(ShtNames)' 然后在'Do While'循环中使用'j = j-1'。 这能解决你的问题吗? – Prebsus