为什么此宏无法正确打印PDF

时间:2019-04-09 13:20:16

标签: excel vba

这是上一个有关“打印到PDF”的问题的后续操作,我的宏可以无错误运行,但是,它并没有完全满足我的要求。它似乎是将我的下拉列表中的每个值插入到正确的单元格中,但仅打印最后一个PDF。

我希望宏

  1. 将第一个下拉值插入正确的单元格中
  2. 让公式计算
  3. 将该页面打印为PDF并将其保存到正确的文件路径
  4. 为下拉列表中的每个值重复1-3

如何调整宏以执行此操作?

Sub Print_To_PDF()
Sheets("MS Wall Summary Daily View").Activate
    Dim vRws As Long, vRng As Range
    Dim d As Range, d8 As Range, Wst As Worksheet
    Dim fPathFile As String

fPathFile = [NewStoreRollout]
Set Wst = Worksheets("MS Wall Summary Daily View")
Set d8 = Wst.Range("D8")

With Wst
   vRws = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set vRng = Range(.Cells(2, "A"), .Cells(vRws, "A"))
    .PageSetup.PrintArea = "$C$2:$M$116"

End With
For Each d In vRng.Cells

d8 = d
Wst.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fPathFile, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False


Next d

MsgBox "Finished"
End Sub

文件路径为: enter image description here

P7中的值链接到另一个选项卡上的D8,在那里下拉列表被插入,因此,只要下拉列表中的值更改,它就应该创建一个唯一的文件路径。

1 个答案:

答案 0 :(得分:1)

您应该使用动态文件路径来确保每个文件都单独保存。您尝试通过使用命名范围作为文件路径变量的引用来实现此目的:

Dim fPathFile As String

fPathFile = [NewStoreRollout]

这会将[NewStoreRollout]的值存储到fPathFile中。但是,这不会在变量fPathFile与命名范围之间建立某种链接。为了获取命名范围的最新值,您需要在运行循环的每次迭代中更新变量。您应该在使用变量保存pdf文件之前执行此操作。您可以像第一次一样通过再次分配它来更新值。

For Each d In vRng.Cells

d8 = d
fPathFile = [NewStoreRollout] 'Update the value of fPathFile to create unique files to save
Wst.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fPathFile, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False


Next d

要完成此操作,我在原始代码中的行fPathFile = [NewStoreRollout]之后插入了行d8 = d