「回答」シートにおいて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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ExcelVBA】値を変更しながら連続でPDFを作成し,それらを結合した状態で出力するコード 3 2024/05/20 10:43
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2024/06/18 09:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2024/07/02 08:51
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) Excel VBA マクロ シート名を変えずにA列にあるセル名の名前でファイルの分割をしたいです 3 2024/02/05 22:10
- Visual Basic(VBA) VBAに関して 2 2023/11/09 20:57
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
エクセルVBA
Visual Basic(VBA)
-
Excel VBA 選択範囲の罫線色の変更プロージャの動作速度の改善について
Visual Basic(VBA)
-
Sub 要具ライフ() ActiveSheet.Cells.Find(what:=TOPゴム")."
Visual Basic(VBA)
-
-
4
現在のブックを閉じないで、マクロ抜きの(現在のブックの)コピーを作成したい
Visual Basic(VBA)
-
5
VBA SaveChanges 上書きされない
Visual Basic(VBA)
-
6
VBA一覧取得 再投稿
Visual Basic(VBA)
-
7
VBAコードのインデント表示
Visual Basic(VBA)
-
8
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
9
ExcelのVBAコードについて教えてください。
Visual Basic(VBA)
-
10
VBA listBoxについて
Visual Basic(VBA)
-
11
エクセルのパスワードの一括解除について フォルダ内の複数のエクセルファイルのパスワードの一括解除する
Excel(エクセル)
-
12
エクセル2013で月間勤務表から週間勤務表へ自動転記する方法と関数の仕組みを教えて下さい。
Excel(エクセル)
-
13
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
14
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
15
Word VBA MSGBOX 内で降順表示
Visual Basic(VBA)
-
16
エクセル関数に詳しい方教えてください
Excel(エクセル)
-
17
VBA 複数条件の分岐処理の上手な方法
Visual Basic(VBA)
-
18
Excelにてある膨大なデータを管理しています。 そこで、特定の市町村にのみ色を付けたいです。 Ex
Excel(エクセル)
-
19
VBA初心者 Ctrl+での操作、ボタンに登録での操作
Visual Basic(VBA)
-
20
Excel VBA 定義されたプロージャ名、関数名の取得
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excel UserForm の表示位置
-
Excel VBA IF文がうまく動作し...
-
エクセルVBA 配列からセルに「...
-
【VBA】写真の貼り付けコードが...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
Excelで空白セル直前のセルデー...
-
EXCEL VBA 文中の書式ごと複写...
-
特定の色のついたセルを削除
-
【Excel VBA】一番右端セルまで...
-
【ExcelVBA】値を変更しながら...
-
Excel 範囲指定スクショについ...
-
下記のマクロの説明(意味)を...
-
入力規則のリスト選択
-
Excel-VBA セルのデータ書出し(Q2)
-
VBA にて、条件付き書式で背景...
-
飛び地セルの空白判定
-
C# DataGridViewで複数選択した...
-
VB DataGridViewについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excel UserForm の表示位置
-
エクセルVBA 配列からセルに「...
-
EXCEL VBA 文中の書式ごと複写...
-
特定の色のついたセルを削除
-
【Excel VBA】一番右端セルまで...
-
Excelで空白セル直前のセルデー...
-
【VBA】写真の貼り付けコードが...
-
VBAコードについて教えてくださ...
-
【VBA】【ユーザーフォーム_Lis...
-
Excel 範囲指定スクショについ...
-
VBAでユーザーフォームにセル値...
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
Excel VBAでCheckboxの名前を変...
-
複数指定セルの可視セルのみを...
-
Excel VBA IF文がうまく動作し...
-
エクセルのカーソルを非表示に...
-
入力規則のリスト選択
-
VBA 複数条件の分岐処理の上手...
おすすめ情報