【问题标题】:Excel macro to print sheets based on multiple valuesExcel 宏基于多个值打印工作表
【发布时间】:2024-01-24 04:22:01
【问题描述】:

我有一个带有宏的工作表,当我更改单元格 E5 中的值时,会自动填充 sheet1 中的某些字段,从其他工作表上的表中搜索并返回值 - sheetTable )。

我现在的目标是在 sheetTable 上的一列中选择一系列值,并将它们中的每一个分配给 sheet1 上的单元格 E5,然后打印每个值。

假设我选择了 3 个值分别为 45、50 和 66 的单元格。当我运行宏时,它会将 45 分配给单元格 E5 并打印 sheet1,然后它会将 50 分配给单元格 E5并打印 sheet1,最后将 66 分配给单元格 E5 并打印 sheet1

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim shape As Excel.shape
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("e5")


If Not Application.Intersect(KeyCells, Range(Target.Address)) _
       Is Nothing Then


For Each shape In ActiveSheet.Shapes
    shape.Delete
Next

InsertPictureInRange Range("f2").Value & Range("e5").Value & ".jpg", _
    Range("c9")
InsertPictureInRange Range("f2").Value & Range("e5").Value & "_1.jpg", _
    Range("i9")

If Range("e5").Value = "" Then Exit Sub

End If

End Sub

【问题讨论】:

    标签: excel printing vba


    【解决方案1】:

    以下将运行一个选择并将值粘贴到 Sheet1 上的单元格 E5 中,然后打开“PrintToFile”对话框。从那里,您必须手动输入文件位置和名称。

    Dim Rng As Range
    Set Rng = Selection
    
    Dim Sheet1 As Worksheet
    Set Sheet1 = Sheets("Sheet1")
    
        For Each Cell In Rng
            Sheet1.Range("e5").Value = Cell.Value
            Sheet1.PrintOut Copies:=1, printtofile:=True, collate:=True, ignoreprintareas:=False
        Next Cell
    

    这至少能让你成功一半。也许比我更有经验的人可以添加如何使用 VBA 输入文件位置和名称。

    【讨论】:

    • 感谢您的帮助。它有点帮助,但没有用。这仅适用于同一张纸。我需要的是在其他工作表(带有表格的工作表)上选择一个范围。我还需要代码打印到 pdf sheet1 并用 E5 中的值命名 pdf 文件。因此,如果我在表格上选择 3 个值为 34,44 和 55 的单元格。它将创建以下文件:34.pdf、44.pdf 和 55.pdf
    • 啊,我明白了。谢谢你的澄清。我不确定是否有一种方法可以在使用 SendKeys 之外从 Excel 中保存 PDF 文件,我避免使用这种方法。我将更新我的答案,以展示您如何为每个值打开打印对话框。从那里您必须手动输入工作表的文件位置和名称。我知道,这不是一个完整的答案。不过,我将继续寻找将 PDF 保存到 Excel 文件的方法。