前提・実現したいこと
いつもありがとうございます。
VBAでエクセルの勤務表から勤務日等を抽出し、別のソフトウェアに読み込ませる転換マクロツールを作っています。
以下のVBAを実行したところ、1回目は正常に動作するのですが、2回目以降、初回に読み込んだものと違う階層のエクセルファイルを読み込もうとすると、以下のエラーメッセージが再現性ありで発生します。
発生している問題・エラーメッセージ
実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されていません。
該当のソースコード
VBA
1Private Sub btnGetFilePath() 'ファイル選択ダイアログモジュール 2 3Dim fType As Variant 4Dim fPath As Variant 5 6'選択できるファイルの種類はすべてのファイル 7fType = "" 8 9'ファイル参照ダイアログの表示 10fPath = Application.GetOpenFilename(fType, , "") 'fType = fPath。 11 12If fPath = False Then 13'ダイアログでキャンセルボタンが押された場合は処理を終了します 14End 15End If 16 17Dim Target As Workbook 'コンバートモジュール 18Set Target = Workbooks.Open(fPath) 19 20'これをセル抜き出しから数値抜出に変更⇔循環小数エラーの解決。 21Target.Sheets(1).Range("G2").Copy ThisWorkbook.Sheets(2).Range("A2") 22Target.Sheets(1).Range("H2").Copy ThisWorkbook.Sheets(2).Range("A3") 23 24End Sub
試したこと
前回質問したと同一のVBAですが、不要な記述を削除して整形しました。
今回のエラーの再現性から、"1回目にエクセルファイルを開いたときにどこかに値を取得して"しまっていて、"2回目以降、その1回目に取得したパスの値と違う"ことが"実行時エラー'91'"の原因なのではと考えました。
すると例えば、23行End Subの真上に〇〇.Clearと処理完了時に値をクリアする命令文を入れれば解決するのかと思い、該当する記述を調べましたがわかりませんでした。もしおわかりになればお願いします。
補足情報(FW/ツールのバージョンなど)
Excle2016
Q1)どの行がエラーになるのでしょうか?
Q2)
>前回質問したと同一のVBAですが、不要な記述を削除して整形しました。
その整形後のコードだけでエラーになりますか?
Q3)そのコードは標準モジュールに書かれたものですか?&そのモジュールに他のプロシージャはありますか?
end-uさん
情報追記します。
Q1)どの行がエラーになるのでしょうか?
21行目のTarget.Sheets(1).Range("G2").Copy ThisWorkbook.Sheets(2).Range("A2")の行です。
Q2)
>前回質問したと同一のVBAですが、不要な記述を削除して整形しました。
その整形後のコードだけでエラーになりますか?
はい。この成型後のコードだけでエラーになります。
Q3)そのコードは標準モジュールに書かれたものですか?&そのモジュールに他のプロシージャはありますか?
このコードは標準モジュールに書かれたものです。このモジュールに他のプロシージャはありません。
よろしくお願いします。

回答2件
あなたの回答
tips
プレビュー