Исправьте макрос для запуска через список проверки данных, чтобы напечатать результаты для каждого имени в списке - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть список проверки данных с именами студентов в ячейке C5. Каждый раз, когда я упоминаю имя, оно заполняет отчет на этой странице результатами для этого конкретного ученика. (он использует vlookup в отчете). Мне нужно распечатать эти отчеты для всех студентов. В настоящее время я запускаю макрос, который копирует имена, выбирая его из списка студентов на другом листе, а затем печатает. Я хочу, чтобы макрос проходил через список проверки и печатал автоматически и продолжал идти до последней фамилии в списке. Вот то, что я сейчас использую.

Sub 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 голосов
/ 09 ноября 2018

Как следует из комментариев, ваш вопрос сформулирован не очень четко. Это мое лучшее предположение.

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
0 голосов
/ 09 ноября 2018

Вы можете попробовать следовать шаблону, подобному этому:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...