Печать из диапазона
Код
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
, вы разрешаете диапазон быть несмежным, т. е. когда код «попадает» в пустую ячейку, он все еще ищет вследующие ячейки диапазона, которые могут быть даже предпочтительнее в этом случае, так как вы объявили небольшой диапазон.Во многих других случаях вы можете не захотеть включать эти строки.