更正宏以遍历数据验证列表以打印列表中每个名称的结果

时间:2018-11-09 10:36:20

标签: excel vba loops

我有一个数据验证列表,其中包含C5单元中学生的姓名。每次我提出一个名字时,它都会在该页面的报告中填写该特定学生的成绩。 (它在报告中使用vlookup)。我需要为所有学生打印这些报告。我目前正在运行一个宏,该宏将复制从另一张纸上的学生列表中挑选出来的名字,然后进行打印。我希望宏在验证列表中运行并自动打印,并一直保持到列表中的姓氏为止。 以下是我目前正在使用的内容。

子PrintAll() ' 'PrintAll每周测试报告宏 '

Range("C5").Select
Sheets("StudentsOne").Select
Range("A3").Select
Selection.Copy
Sheets("Test Report1").Select
Selection.PasteSpecial Paste:=xlPasteValues
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False

Range("C5").Select
Sheets("StudentsOne").Select
Range("A4").Select
Selection.Copy
Sheets("Test Report1").Select
Selection.PasteSpecial Paste:=xlPasteValues
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False

Range("C5").Select
Sheets("StudentsOne").Select
Range("A5").Select
Selection.Copy
Sheets("Test Report1").Select
Selection.PasteSpecial Paste:=xlPasteValues
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False

并根据有多少研究对象来保持这种状态。它每年都会更改,我会对其进行更新。它的范围是35到50。因此,每年我都会删除或添加更多范围来复制粘贴。我很想让宏仅在列表中运行,然后自己执行打印。现在列表中有41条记录。 (41个名字) 任何帮助表示赞赏。 谢谢

2 个答案:

答案 0 :(得分:0)

您可以尝试遵循以下模式:

Sub PrintAll()
    Dim Students As Range, student As Range

    Set Students = Worksheets("StudentList").Range("A1:A40")

    For Each student In Students
        Worksheets("StudentsOne").Range("C5") = student
        Worksheets("Test Report1").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Next student
End Sub

假设:

  1. 您在工作表(StudentList)上有学生列表,用于填充数据验证
  2. 工作表StudentsOne是您要粘贴学生姓名(即C5)的位置
  3. 要打印的实际纸张是Test Report1

注意:

每次运行代码时,您只需要调整Students范围参考即可。如果一年有50名学生,则将范围参考更改为A1:A50

答案 1 :(得分:0)

正如评论所暗示的那样,您的问题措辞不太清楚。这是我的最佳猜测。

Sub PrintAll() ' ' PrintAll Weekly Tests Report Macro '

Dim r As Range

With Sheets("StudentsOne")
    For Each r In .Range("A3", .Range("A" & Rows.Count).End(xlUp))
        Sheets("Test Report1").Range("C5").Value = r.Value
        Sheets("Test Report1").PrintOut Copies:=1, Collate:=True, ignorePrintAreas:=False
    Next r
End With

End Sub