3

同じワークブック内の別のシートから入力されたワークブック内のシートを印刷するために、動的印刷範囲を設定しようとしています。困っているようです。次のように、横方向と呼ばれる Name Manager で名前付き範囲を設定します。

=OFFSET('スライドシート印刷横'!$A$27, 0, 0, COUNTA('スライドシート印刷横'!$A:$A), COUNTA('スライドシート印刷横'!$1:$1))

私はVBAコードを書こうとして立ち往生しています(私はVBAについて何も知りません)私はこれを持っています...

Sub Printarea()
    ActiveSheet.PageSetup.Printarea = "lateral"
End Sub

「実行時エラー '1004'」というエラーが表示されます

誰でも助けることができますか?

4

1 に答える 1

0

最後の 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
于 2012-11-26T10:38:03.090 に答える