【问题标题】: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 set 和 second 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
相关资源
最近更新 更多