[[20200727134244]] 『Excelで印刷範囲の自動変更』(きょうへい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Excelで印刷範囲の自動変更』(きょうへい)

Excelで文字を入力すると自動で印刷範囲の可変ができるようにしたい。
プリントしたい範囲⇒A1:I最終行
プリントしたい範囲はA行に題名があり、毎日データを更新しデータ個数が変わります。

構文
Sub 印刷範囲()
Dim R As Range
R = ThisWorkbook.Worksheets(1).UsedRange.Address
PageSetup.PrintArea = R
End Sub

試したこと1
変数をAs Rangeからバリアント型に変更(変数の型は現在省略で塾で習っているためまだ詳しく理解できていないです)⇒オブジェクトが必要とデバック

試したこと2
Set R = ThisWorkbook.Worksheets(1).UsedRange.Address⇒型が一致しませんとなります。

恐れ入りますがご教授いただければと思います。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


オブジェクト代入なら Set 使うけど、文字列代入なら、Set は使わないです。 変数に代入するとき、a = 1 とか、イコールだけでしょう?

あとは、A行末尾を得る必要がありそうに書いているのに、単純に UsedRange にしているのが気になります。 まぁ、L列以降は空欄しか無いとか、1行全部空欄とか無いなら構いませんけど。
(???) 2020/07/27(月) 14:47


 RはString指定にしてPageSetupにどこのシートなのかの指定を追加してみてくれ。
 オブジェクトが必要のエラーはPageSetupのところで出ている。
 エラー時にはデバッグでどこがエラーになっているか確認すること。
(ねむねむ) 2020/07/27(月) 14:51

 マクロを使わない方法。
 数式-名前の管理-新規作成で名前にPrint_Area、範囲に対象のシート、参照範囲に
 =$A$1:INDEX($I:$I,MATCH(1,0/($I$1:$I$1000<>""),1))
 と設定する。
 なお、上記は最終行が最大1000行目までに対応している。
(ねむねむ) 2020/07/27(月) 15:40

Sub 印刷範囲()
Dim R As Range
Set R = ThisWorkbook.Worksheets(1).UsedRange
PageSetup.PrintArea = R.Address
End Sub
(mm) 2020/07/27(月) 17:08

 コードをシートモジュールに記載している場合はmmさんの記述でよいが
 標準モジュールに記載している場合はPageSetupの前に親シートの指定が必要になる。
 ただ、2016での確認なので以前のバージョンでは異なる可能性もある。
(ねむねむ) 2020/07/27(月) 17:18

???様
ねむねむ様
mm様

ご返信ありがとうございます!
セル範囲は合っていたので最終行の構文でおかしなことが起きてると思っていたのですが
pagesetupにオブジェクトが必要という閃きが足りませんでした!
オブジェクトを付け足してみるとスムーズに対処できました、ありがとうございます。
(きょうへい) 2020/07/27(月) 17:25


ねむねむ様

マクロを使わない方法、ありがたいです。
それが出来ればベストでしたので、こちらも使わせて頂きます。
(きょうへい) 2020/07/27(月) 17:26


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.