「回答」シートにおいて1行に1件ずつデータが入っており,I2セルからI3セルで行番号を始点,終点として指定すると「様式」シートに指定した行のデータが順番に反映され,それらを結合した状態で出力し,ファイル名はI2セルに入力した行のデータ容に則したものになるコードについて伺います。
以前,この掲示板で質問させていただいおり,そのときは「ファイル名はI2セルに入力した値のときに「様式」シートに反映される内容に則したものにしたい」という条件がなかったため,そのときに教えていただいたコードに修正を加えたものが以下のコードですがエラーで止まってしまいます。
(l = Sheets("回答").Range("N7").Value &~の部分で止まってしまいます)
どのように修正したらよいか,ご教示願います。
Sub 連続PDF作成()
Dim stK, stY, stD
Dim startN, endN, i As Long
Const AA = "A1:H40" ' ← コピー(転記)対象のセル範囲
Dim l As String ' ← 作成するPDFファイル名
Set stK = Worksheets("回答")
Set stY = Worksheets("様式")
startN = stK.Range("I2").Value
endN = stK.Range("I3").Value
If Application.CountBlank(stK.Range("I2:I3")) > 0 Or _
Not (IsNumeric(startN) And IsNumeric(endN)) Then _
MsgBox "無効な入力です": Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
stY.Copy
With ActiveWorkbook
Set stD = ActiveSheet
For i = startN To endN
stK.Range("A5").Value = stK.Cells(i + 9, 1).Value
stD.Copy after:=.Worksheets(.Worksheets.Count)
.Worksheets(.Worksheets.Count).Range(AA).Value = stY.Range(AA).Value
Next i
stD.Delete
stK.Range("A7").Value = stK.Cells(startN + 9, 1).Value
l = Sheets("回答").Range("N7").Value & "・" & Sheets("回答").Range("G7").Value & "・" & Sheets("回答").Range("D7").Value
.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\" & l & ".pdf"
.Close False
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
No.4ベストアンサー
- 回答日時:
こんばんは
上から読んだだけで試していませんが
勘違いをしているようですね
よくRange()などでやるやつですね
オブジェクトを明示しないため間違った場所を探す不具合 今回はWorkbook
stY.Copy で 新しいブックが作られます(1シートのみ)
これがActiveWorkbookです
Sheets("回答")のブックは?ThisWorkbookのはずです
しかし l = Sheets("回答")(エラー対象コード)が走る時
まだ新規ブックがアクティブになっているので当然 Sheets("回答")はありませんね
対策は#3様のアドバイスを支持しますが
改造して不具合と言う事で付け加えます
通常 処理は上から下に流れていきます
大まかに 入力(条件定義・設定・値の取得など)メイン処理 出力
今回加えたのはエラー部分と見受けられますが
l = Sheets("回答").Range("N7").Value ・・・・
変数 l はメイン処理の結果を必要としていない様ですの
上流で変数 l に値を代入すればスムースな気がします
MsgBox "無効な入力です": Exit Sub の下あたり
もっとも Sheets("回答")は せっかく変数を作っているのですから
stK.Range("N7").Valu・・・・
上手く言えませんが Withの中で他のオブジェクトを明示しないで使うのは避けた方が良いと思います(あらかじめ変数などにセットし明示する)
No.6
- 回答日時:
連投になってしまい申し訳ありません
やっちゃいました。。。確認せずにすぐ投稿してしまう癖
出力PDFファイル名は変更箇所が含まれないので #5が間違えです;
エラーとは関係ないところですが
よく見るとおかしいですね
>それらを結合した状態で出力し
各ページの内容を変えながら1pdfファイルにまとめて(複数ページで)出力したい?
現状ブックシートを増やしているので
1pdfファイルにまとめて(複数ページで)出力は出来ないと思います
やるとしたら初めの1シートは現状のCopyで新規ブックを作り
内容を変更した元シートを新規ブックのインデックス1(Copyで出来た)シートの下部または右にペーストしてつなげて行き同じシートにまとめてページ設定して出力します(ブックを作ってからやるのかもしれないけれど)
ページごとに別ファイルを出力するなら 都度名前を変更する必要があるのと 出力部分をループ内に入れる事で出来ると思います
>「ファイル名はI2セルに入力した値のときに「様式」シートに反映される内容に則したものにしたい」
l = Sheets("回答").Ran・・・ 説明とシート名が一致していない
>stY.Range(AA).Value 変更コードが無い
最終stK.Range("A5").Valueは stK.Cells(endN + 9, 1).Value
ループ内に入れる理由?
stY.Range(AA)が
stK.Range("A5").Valueを参照している関数?かもしれないが・・
とりあえず
l = Sheets("回答").Range("N7").Value & "・" & Sheets("回答").Range("G7").Value & "・" & Sheets("回答").Range("D7").Value
.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\" & l & ".pdf"
.Close False
を消して目的のブックが出来ているか確認する必要がありそうかな
惑わせる回答ついでに
目的のブックが出来る事が前提ですが添削してみました
各ページの内容を変えながら1pdfファイルにまとめて(複数ページで)出力付け足す考え方で
Sub 連続PDF作成2()
Dim stK, stY, stD
Dim startN, endN, i As Long
Const AA = "A1:H40" ' ← コピー(転記)対象のセル範囲
Dim l As String ' ← 作成するPDFファイル名
Set stK = Worksheets("回答")
Set stY = Worksheets("様式")
startN = stK.Range("I2").Value
endN = stK.Range("I3").Value
If Application.CountBlank(stK.Range("I2:I3")) > 0 Or _
Not (IsNumeric(startN) And IsNumeric(endN)) Then _
MsgBox "無効な入力です": Exit Sub
l = stK.Range("N7").Value & "・" & stK.Range("G7").Value & "・" & stK.Range("D7").Value
Application.ScreenUpdating = False
Application.DisplayAlerts = False
stY.Copy
With ActiveWorkbook
Set stD = ActiveSheet
For i = startN To endN
stK.Range("A5").Value = stK.Cells(i + 9, 1).Value
stD.Copy after:=.Worksheets(.Worksheets.Count)
.Worksheets(.Worksheets.Count).Range(AA).Value = stY.Range(AA).Value
Next i
Dim n As Long, rCount As Long
If endN - startN > 0 Then
With .Worksheets(2).UsedRange
rCount = .Rows(.Rows.Count).Row
End With
For i = 3 To .Worksheets.Count
With .Worksheets(2).UsedRange
n = .Rows(.Rows.Count).Row + 1
End With
.Worksheets(i).UsedRange.Copy .Worksheets(2).Cells(n, 1)
Next i
.Worksheets(2).PageSetup.PrintArea = .Worksheets(2).UsedRange.Address
For i = rCount + 1 To n Step rCount
.Worksheets(2).Rows(i).PageBreak = xlPageBreakManual
Next
End If
.Worksheets(2).ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\" & l & ".pdf"
.Close False
End With
stK.Range("A7").Value = stK.Cells(startN + 9, 1).Value
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
始めのページ stD.Delete でいらないようなので
シートインデックス2にまとめています
いる場合はシートインデックス 2 を 1に シートインデックスループ初期値 3 を 2 にすると初めのコピペシートが含まれるようになります
新規ブックはどのみち保存せずに閉じるので 削除などは不要ですね
No.5
- 回答日時:
酔って寝る前に回答してはダメですね
>stK.Range("A5").Value = stK.Cells(i + 9, 1).Value
前言撤回します
変数 l はメイン処理の結果を必要としていない様ですの上流で変数 l に値を代入すればスムースな気がします
すみませんでした
No.2
- 回答日時:
こんばんは
>l = Sheets("回答").Range("N7").Value &~の部分で止まってしまいます
通常であれば、このセンテンスでエラーになることは無いと思いますが・・
妄想を逞しくしてみるなら・・・
(以下は妄想なので、当たるも八卦です)
エラーメッセージは「インデックスが~~」だったりしませんか?
もしそうなら、
>Set stD = ActiveSheet
のActiveSheetは「回答」シートだったりしませんか?
(ご提示のコードのこの部分が何をしたいのか不明ですが・・)
更に、もしそれも当たっているなら、
>stD.Delete
でシートを削除しているので、「参照先が見つからない」というエラーですね。
作成中やデバッグ中は、
>Application.ScreenUpdating = False
>Application.DisplayAlerts = False
などは、外しておいた方が、原因等も見つけやすいと思いますよ。
ありがとうございます。
以前,元となるコードを作っていただいた方ですね。
返事が遅くなり申し訳ありません。
>Set stD = ActiveSheet
のActiveSheetは「回答」シートだったりしませんか?
(ご提示のコードのこの部分が何をしたいのか不明ですが・・)
ActiveSheetは「回答」シートではなく「様式」シートのはずです。
エラーメッセージは
「実行時エラー 9
インデックスが有効範囲にありません」
です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBAコードのインデント表示
Visual Basic(VBA)
-
Excel VBA 選択範囲の罫線色の変更プロージャの動作速度の改善について
Visual Basic(VBA)
-
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
-
4
Sub 要具ライフ() ActiveSheet.Cells.Find(what:=TOPゴム")."
Visual Basic(VBA)
-
5
VBA SaveChanges 上書きされない
Visual Basic(VBA)
-
6
VBA一覧取得 再投稿
Visual Basic(VBA)
-
7
エクセルVBA
Visual Basic(VBA)
-
8
【ExcelVBA】値を変更しながら連続でPDFを作成し,それらを結合した状態で出力するコード
Visual Basic(VBA)
-
9
Vba ファイル書き込み時に書き込みエラーを回避する方法を教えてください
Visual Basic(VBA)
-
10
VBA初心者です。次のVBAコードで、17行目を削除したいのですがうまく動きません 改善策を教えてく
Visual Basic(VBA)
-
11
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
12
VBAの間違い教えて下さい
Visual Basic(VBA)
-
13
サブフォルダに格納されているファイルを、ファイル名ごとに条件分岐させたい
Visual Basic(VBA)
-
14
Word VBA MSGBOX 内で降順表示
Visual Basic(VBA)
-
15
Excel VBA 定義されたプロージャ名、関数名の取得
Visual Basic(VBA)
-
16
現在のブックを閉じないで、マクロ抜きの(現在のブックの)コピーを作成したい
Visual Basic(VBA)
-
17
VBA 複数条件の分岐処理の上手な方法
Visual Basic(VBA)
-
18
VBAなくなるの?
Visual Basic(VBA)
-
19
ExcelVBAマクロで実行した時の疑問
Visual Basic(VBA)
-
20
VBA コードどこがおかしいですか?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 配列からセルに「...
-
VBAマクロ実行時エラーの修正に...
-
DataGridViewのフォーカス遷移...
-
特定の色のついたセルを削除
-
EXCEL VBA 文中の書式ごと複写...
-
VBA:日付を配列に入れ別セルに...
-
Excelで空白セル直前のセルデー...
-
入力規則のリスト選択
-
VBA 重複文字列 色付け
-
Excel UserForm の表示位置
-
VB2005 DataGridView で選択...
-
EXCEL 2010 VBAでピボットで複...
-
【Excel VBA】一番右端セルまで...
-
色のついたセルの文字を消す
-
CSVファイルを読み込んだらセル...
-
C# DataGridViewで複数選択した...
-
excelで結合セルの場合にエラー...
-
[.Net] DataGridのセルをマージ...
-
【VBA】写真の貼り付けコードが...
-
【ExcelVBA】抽出後の特定の列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
Excel UserForm の表示位置
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
C# DataGridViewで複数選択した...
-
入力規則のリスト選択
-
Excel VBA IF文がうまく動作し...
-
【VBA】写真の貼り付けコードが...
-
Excel 範囲指定スクショについ...
-
EXCEL VBA 文中の書式ごと複写...
-
Excel VBAでCheckboxの名前を変...
-
EXCEL 2010 VBAでピボットで複...
-
飛び地セルの空白判定
-
エクセルのカーソルを非表示に...
-
CellEnterイベント仕様について
おすすめ情報