質問: MsgBox("ファイルパス:" & a & vbCrLf & "ブック名:" & b & vbCrLf & vbCrLf & "この場所に内容を転記しますか?", vbYesNo, "転記する/しない") Then Exit Sub '以降3 転記用のコード end sub ```
回答: コード内の変数`a`と`b`はそれぞれ変数`fP`と`fN`の誤記ではないかと思います。 この誤記が原因で、そもそもブックを開けていないからWorkbooksにも見つからないのではないでしょうか? まずはこの誤記を修正したコードで動作確認してみてください。 (追加のアドバイス) 指摘1 宣言文について `Dim fP , fN as String` のような宣言文の書き方は、変数`fP`と変数`fN`をそれぞれString型で宣言しているように見えますが、実際には`fN`だけString型で宣言され、fPは型指定なし(=Variant型)で宣言されていることになります。 今回のコードでは特に影響はないと思いますが、ご注意ください。 指摘2 開いたブックの取得について 提示いただいたコードでは`Workbooks.Open`でブックを開き、同じファイル名でブックを探して処理をしようとしています。 しかし、`Workbooks.Open`はブックを開いた際にそのブックを戻り値として返してくれています。 ですので、 ``` ' Workbooks.Open a & "\" & b '1 'Ln = Workbooks(fN).Sheet1.Cells(Rows.Count, 2).End(xlUp).Row '2 ★エラーが発生するコード★ Dim wb As Workbook Set wb = Workbooks.Open fP & "\" & fN '1 Ln = wb.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row '2 ★エラーが発生するコード★ ``` のように処理すれば、わざわざファイル名でブックを探す必要がなく、確実に開いたブックを対象に処理することができます。 なお`Sheet1`というシートの指定方法は、`Sheet1`を単独で使用すれば「そのマクロが書かれているブックのSheet1」を参照することができますが、ワークブックのプロパティではないため`Workbooks(fN).Sheet1`という使い方はできません。 指定のブックの第1シートを取得したいのであれば`Workbooks(fN).Worksheets(1)`といった書き方をしましょう。 以上、参考になれば幸いです。