Sub taisou3_1()
Dim wb As Workbook
Debug.Print ThisWorkbook.Path ’イミディエイトウィンドウにパスが出力されました。
Set wb = Workbooks("Book2.xls") ’ここに来るとやはり下記のようなウィンドウが出て先へ進まず、実行されませんでした。
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & wb
End Sub
Set ステートメンドでオブジェクトへの参照を設定するなら、そのオブジェクトが取得可能(エクセルファイルなら、そのファイルをすでにエクセルというアプリケーションが開いている)でないとダメです。 → この内容見落としていました。これが前提で、ファイルを開くマクロを書くこと自体がおかしかったんですね。スッキリしました!
唐沢俊孝さんの投稿
(投稿ID: 1488)
先日質問しました頭の体操3ですが、動画の説明はよく分かりました。
その内容で消化したいのですが、1点どうしても知りたいところがありましたので、
アドバイスお願いいたします。
頭の体操3は、”固有オブジェクトの変数”を学んだ直後にトライしていましたので、
それを利用してできないか考えてコードを書きましたが、エラーになりました。
保存されたエクセルブックにニックネームをつけて開く操作ができると思っていましたが、
以下のとおり、うまくいきませんでした。
問題[1]今開いているファイルと同じフォルダにあるエクセルファイル「Book2.xls」を開く
Sub taisou3()
Dim wb As Workbook
Set wb = Workbooks("Book2.xls") 'ここでデバッグとなり先へ進みません。
Workbooks.Open Filename:=Thisworkbook.path & "\" & wb
End Sub
小川 慶一さんのコメント
(コメントID: 2712)
「Book2.xls」というエクセルファイルはすでに開かれていますか?
拡張子が違うとか、ファイル名が違うとか。
そもそも、新しいファイルはまだいっさい開いてないとか。。
唐沢俊孝さんのコメント
(コメントID: 2714)
エクセルファイル Book2.xls は同じフォルダに保存しされています。正解のマクロでは問題なく動き、Book2.xls は開きます。拡張子も合っています。また、マクロ実行前には、Book2.xlsは開いていません。閉じた状態からマクロ実行しています。
小川 慶一さんのコメント
(コメントID: 2715)
次やって再現したら、 thisworkbook.path を出力してみてください。
debug.print thisworkbook.path
それで出力されたフォルダ名が、 book2.xls のあるところと一致しているか?をチェック。
唐沢俊孝さんのコメント
(コメントID: 2716)
>debug.print thisworkbook.path
>それで出力されたフォルダ名が、 Book2.xls のあるところと一致しているか?をチェック。
⇒ イミディエイトウィンドウ出力されたパスは、保存されているBook2.xlsのパス(プロパティの場所に書かれているパス)と
全く同じでした。
パス出力は以下のようにしてイミディエイトウィンドウに出力して確認しました。
エラー内容は以下の通りでした。
実行時エラー ’9’:
インデックスが有効範囲にありません
ヘルプで確認しましたが、該当していないような気がします。
小川先生のPCでは、このコードで実行できますでしょうか。
手動でBook2.xlsを開いた後、以下の閉じるコードの方は、問題なく閉じました。
小川 慶一さんのコメント
(コメントID: 2717)
試しました。その様子を動画収録しました。
改めてソース拝見しましたが、ソースを読むだけでも、何が錯誤されているかと思われました。
コメントも添えています。
くりかえしますが、 Set ステートメンドでオブジェクトへの参照を設定するなら、そのオブジェクトが取得可能(エクセルファイルなら、そのファイルをすでにエクセルというアプリケーションが開いている)でないとダメです。
https://www.dropbox.com/s/9guly069t5qxaqh/book2.xls_open.mp4?dl=0
唐沢俊孝さんのコメント
(コメントID: 2720)
解説ありがとうございます!
Set ステートメンドでオブジェクトへの参照を設定するなら、そのオブジェクトが取得可能(エクセルファイルなら、そのファイルをすでにエクセルというアプリケーションが開いている)でないとダメです。
→ この内容見落としていました。これが前提で、ファイルを開くマクロを書くこと自体がおかしかったんですね。スッキリしました!
小川 慶一さんのコメント
(コメントID: 2722)
そういうことです。そして、要は、エラーメッセージが言っていたのは、「そういわれても、そんなオブジェクトないんだけど?!」てことでした。
小川 慶一さんのコメント
(コメントID: 3186)
過去の投稿見直ししていてふと気になったのでコメント追記しています。
回答当時僕も見誤っていたかもしれません。
以下、 wb だとオブジェクトそのものを指すので、以下、最後、 wb でなく、 wb.Name では?
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & wb