Использование эталонного цикла ячейки (диапазона) для открытия и печати книг Excel - PullRequest
0 голосов
/ 22 декабря 2018

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

Это то, что у меня есть:

Sub Test()

Dim varCellvalue As Long
Dim rng As Range, rngcell As Range
Dim wb As Long
Set rng = Range("A1:A20")

For Each cell In rng

If Not cell = "" Then

varCellvalue = Range(cell).Value

Workbooks.Open "G:\_QA\Excel Workspace\Projects\Auto-print Processing Forms\Printouts\" & varCellvalue & ".xls"

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False

Workbooks(varCellvalue).Close SaveChanges:=False

On Error Resume Next

End If

Next cell

End Sub

У меня есть рабочая книга, которая обрабатывает данные другого импортированного листа, который обновляется каждый день.Пока что я нахожусь в состоянии получить всю необходимую информацию, чтобы затем циклически перебирать сгенерированный список и использовать полученные значения ячеек, чтобы затем открыть и распечатать нужные мне листы.

Редактировать:

Sub Test()

Dim rng As Range, rngcell As Range
Dim wb As Excel.Workbook
Set rng = Range("A1:A20")

For Each rngcell In rng.cells

    If Not rngcell.value = "" Then

        Set wb = Workbooks.Open("G:\_QA\Excel Workspace\Projects\Auto-print Processing Forms\Printouts\" & rngcell.Value & ".xls")

        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False

        wb.Close SaveChanges:=False


    End If

Next rngcell

End Sub

1 Ответ

0 голосов
/ 22 декабря 2018

Печать из диапазона

Код

Sub PrintFromRange()

  Const cPath As String = "G:\_QA\Excel Workspace\Projects\" _
      & "Auto-print Processing Forms\Printouts\"
  Const cExt As String = ".xls"
  Const cRng As String = "A1:A20"

  Dim i As Integer

  With Range(cRng)
    For i = 1 To .Rows.Count
      If .Cells(i, .Column) <> "" Then
        With Workbooks.Open(cPath & .Cells(i, .Column) & cExt)
          .ActiveSheet.PrintOut Collate:=True, IgnorePrintAreas:=False
          .Close False
        End With
'       Else: Exit For
      End If
    Next
  End With

End Sub

Примечания

Код демонстрирует, что иногда нет необходимости использовать ссылки на объекты.

Использование оператора With - это хороший способ разбить код на части, т.е. сделать его короче и более читабельным.

Мне неясно, почему использование Not и = может быть предпочтительнее использования <>,Таким образом, я использую его исключительно для объектов, обычно If Not ... Is Nothing Then.

Свойство PrintOut Copies по умолчанию равно 1, поэтому его можно безопасно опустить.Неясно, каково значение по умолчанию Collate, и мой Excel 2003 не распознает IgnorePrintAreas.

Первый аргумент Close - SaveChanges, поэтому его можно упростить, простодобавив 'его параметр (False в данном случае).

Не используя строки Else: Exit For, вы разрешаете диапазон быть несмежным, т. е. когда код «попадает» в пустую ячейку, он все еще ищет вследующие ячейки диапазона, которые могут быть даже предпочтительнее в этом случае, так как вы объявили небольшой диапазон.Во многих других случаях вы можете не захотеть включать эти строки.

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