【问题标题】:Convert ranges of rows in Excel to pdf file with VBA我想用vba将excel中的行范围转换为pdf文件
【发布时间】:2022-01-25 16:40:40
【问题描述】:

我想将 excel 中的行范围转换为带有 vba 的 pdf 文件。但在不同的工作表中具有特定格式。到目前为止我所做的。但问题是,我的代码如何忽略具有相似值的行。我想在 pdf 文件下添加所有具有相似值的行。例如: the first image shows how the data are in the data setsecond image is the format of the output 我希望 EmpID 作为输入,与该 EmpID 相关的行将作为输出,并且这些行将按顺序包含在输出格式中,如第三张图像 expected output。下面我添加了我在 VBA 中添加的代码以获得 pdf。 我面临的问题是它只生成一行的输出,例如 430 并忽略其他 5 个,它用于下一个唯一数字并打印,因为与该行相关的其他列包含必须是的信息包含在pdf中。提前非常感谢。 另一件事让它更清楚一点,我尝试使用 VLOOKUP 从一个 excel 表匹配到另一个表,以便使用某个 Emp_ID 值,行将获得某些输出

Sub pdf_test_7()
Dim i As Integer

For i = 2 To 10

    Sheets("ps").Cells(1, 2) = Sheets("WD").Cells(i, 1)
    
    
    Sheets("ps").Range("A1:Q25").ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:="C:\Users\Desktop\test_code_for_printing_pdf\" & Sheets("WD").Cells(i, 1) & ".pdf", _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=True, _
    OpenAfterPublish:=False
    
Next i
    
    
End Sub

【问题讨论】:

  • 你尝试设置IgnorePrintAreas:=False吗?
  • 是的,我做到了。 :( 但不起作用。
  • 好的。我使用了不同的方法。我选择左上角的单元格并将范围变量设置为等于CurrentRegion,然后将打印区域设置为该范围。另外,IgnorePrintAreas:=False。我在循环内执行此操作。这应该让您的打印范围随着 EmpId 行的变化而变化。
  • 你能分享一下你是怎么做的,然后我就可以知道你是如何处理你的工作的了吗?
  • 我正在使用手机,但我会发布一个应该可以使用的答案。

标签: excel vba pdf


【解决方案1】:

试试:

Sub pdf_test_7()
Dim i As Long
Dim ws as Worksheet

Set ws = Sheets("ps")

  With ws
   .PageSetup.PrintArea = .Range("A1:Q25").Address

   For i = 2 To 10

      .Cells(1, 2) = Sheets("WD").Cells(i, 1)

      .ExportAsFixedFormat Type:=xlTypePDF, _
      Filename:="C:\Users\Desktop\test_code_for_printing_pdf\" & Sheets("WD").Cells(i, 1) & ".pdf", _
      Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=False, _
      OpenAfterPublish:=False

   Next i 
  End With

 Set ws = Nothing
 End Sub

【讨论】:

  • 对不起,仍然给出单行输出而不是所有行作为输出。我在想excel是否忽略了具有相似值的行。因为我拥有的行,它们对每个员工都有相似的值,例如:一个员工的 EmpID 为“430”,他的 ID 相同,其他行有不同的信息。您提供的以及我的 VBA 代码的输出以某种方式占据第一行,然后跳转到另一个唯一的 EmpID。你对此有什么建议吗?
  • @green_world07 恐怕我被难住了。我只是想知道 EmpId 中的过程更改是否提供了预期的列表。您是否使用 FILTER() 返回 EmpId 的行?
  • 不,我没有使用任何过滤器。
  • 我只能建议您在 for 循环的开头设置一个断点并单步执行代码。使用监视窗口查看变量何时更改值或在代码中添加 debug.print 语句以检查值。
猜你喜欢
  • 2021-08-20
  • 2015-06-24
  • 2017-01-28
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2022-01-10
相关资源
最近更新 更多