最後の 2 つの引数は、範囲「横方向」の高さと幅を指定します。空でないセルの数を数えます。ニールのように、次の条件が満たされていれば、コードに問題はありませんでした。
- Slide Sheet Print Lateral シートを使用しています (そうしないと、アクティブ シートの印刷範囲を別のシートの範囲に設定しようとしているため、Activesheet への参照が失敗します)。と
- Slide Sheet Print Lateralシートの列Aと行1に何かがあります。ただし、そうでない場合は、ゼロの範囲の高さおよび/または幅を指定することになります。これは無効な範囲参照であり、1004 エラーが発生します。
これを安全に回避できる唯一の方法は、範囲を割り当てる前に VBA コードで CountA 値を取得することです。いずれかがゼロの場合、ユーザーに警告して中止します。
また、そのような手順にはメソッド名やプロパティ名を使用しないことをお勧めします。多くの場合、問題を回避できますが、場合によっては問題を引き起こす可能性があります。安全のために SetMyPrintRange のようなプロシージャを呼び出します。
編集:振り返ってみると、カウントのチェックをいじる必要はありません。範囲への参照を取得しようとしてください。取得できない場合は、ユーザーに何をすべきかを伝えてください。これを試して:
Sub SetMyPrintArea()
Dim l As Long
Dim wks As Excel.Worksheet
Dim rng As Excel.Range
'Check that the worksheet exists.
On Error Resume Next
Set wks = ThisWorkbook.Worksheets("Slide Sheet Print Lateral")
On Error GoTo ErrorHandler
'If it doesn't, throw an error which will send it to the error handler.
If wks Is Nothing Then
Err.Raise vbObjectError + 20000, , _
"The worksheet Slide Sheet Print Lateral is not in this workbook."
End If
'Try to get the reference to the range. If we can't, there's something wrong.
On Error Resume Next
Set rng = wks.Range("lateral")
On Error GoTo ErrorHandler
If rng Is Nothing Then
Err.Raise vbObjectError + 20000, , _
"Cannot find the range named 'lateral'. Please ensure that there is " _
& "content in row 1 and column A of the Slide Sheet Lateral sheet."
End If
wks.PageSetup.Printarea = "lateral"
ExitPoint:
'Just cleaning up the object references
'to leave the place tidy...
On Error Resume Next
Set rng = Nothing
Set wks = Nothing
On Error GoTo 0
Exit Sub
ErrorHandler:
'Display the message and go to the exit point.
MsgBox "Error " & Err.Number & vbCrLf & Err.Description
Resume ExitPoint
End Sub