質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

1541閲覧

印刷終了時にエラーになる

Kaz-ikep

総合スコア5

印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2019/10/03 23:42

前提・実現したいこと

エクセルで、"表紙"シート+後ろに異なった内容のシートが7枚
あります。
表紙シートでこの7枚のうちの何枚かのシート名を選択し、I8から
I13までに記入し、その番号のシートを印刷する、と言うことを
やろうとしています。

発生している問題・エラーメッセージ

シートの印刷までは出来るのですが、印刷の終わりにエラーとなって
しまいます。

エラーメッセージ
インデックスが有効な範囲にありません。
エラーメッセージの後、デバックで見てみると
Sheets(s).PrintOutがイエローマーカーされ
ています。

該当のソースコード

Sub 印刷()

Dim i
Dim s

Range("I8").Select
i = 0

Do

s = ActiveCell.Offset(i, 0).Value
Sheets(s).PrintOut
If s = "" Then
Exit Do
End If
i = i + 1

Loop

End Sub

試したこと

何を試してよいのかさっぱりわかりません。

補足情報(FW/ツールのバージョンなど)

エクセル2016なのですが、その前まではエクセル2002でした・・・。
初心者に近いもので、何から何まで試行錯誤の毎日です。
何とか解決の糸口を教えていただけませんでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

s = ActiveCell.Offset(i, 0).Value

現在選択されているセルから下に i 番目のセルの値を s に入れる

Sheets(s).PrintOut

s 番目のシートをプリントアウトする

何やってるかわからないんですが、こんなに複雑な方法をとらなきゃいけませんか?

投稿2019/10/03 23:50

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/10/03 23:58

とりあえず、ActiveCell は変わる可能性があるので、一番最初に別の変数にセルをとっておきましょう。そしてその下を見て 7 以上の数(6 より大きい数)が無いかどうか調べてください。
Kaz-ikep

2019/10/04 00:06

早速のご回答まことにありがとうございます。 正直に申し上げまして、複雑な方法かどうかもわからない状況でして・・・。 表紙で選択したシートを印刷する、とこれだけなんですが、印刷しないと使用できないものでして、どのようにしたら良いかわからず、取り合えずは「セルに入力されたシートNo.と同じシートを印刷する」だけを作り、あとはI行が空白になるまで印刷、ってことが出来ればと思い、やってみたのですが・・・。
Zuishin

2019/10/04 00:31

とりあえず、ActiveCell は変わる可能性があるので、一番最初に別の変数にセルをとっておきましょう。そしてその下を見て 7 以上の数(6 より大きい数)が無いかどうか調べてください。
Kaz-ikep

2019/10/04 01:01

ありがとうございます。 既に「一番最初に別の変数にセルをとっておく」の意味すらわかりません。大変申し訳ございません。こちらで質問するレベルに小職はいたっていないようです。再度勉強いたします。
Zuishin

2019/10/04 01:12

cell = ActiveCell としておけば、その時点での ActiveCell が cell という変数に入ります。 これで ActiveCell が変更されても cell で同じものを参照することができるので、ループの前に cell = ActiveCell とし、ループの中では ActiveCell の代わりに cell を使ってください。 7 以上の数はありませんでしたか?
Zuishin

2019/10/04 01:18

あと Sheets(s).PrintOut は End If の後に移動させてください。これが直接の原因ではないかと思います。
Zuishin

2019/10/04 01:21

それと、私が間違えていましたが、s の値は 1 から 7 です。これ以外の番号が書かれたセルが無いか確かめてください。半角で書かれていることも確かめてください。
Kaz-ikep

2019/10/04 01:29

ありがとうございます!まるで魔法のようでした。 先ほどからマクロの本とにらめっこ状態でしたが、解決することができました。 各自順番すらも満足に出来ていない小職に丁寧に教えてくださいまして本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問