- ベストアンサー
エクセルマクロでファイルオープンでシートカットが使えない
- エクセルのVBAマクロについて教えて下さい。"Application.GetSaveAsFilename"にて指定したファイルがシートカットの時にエラーで停止する。
- エクセルマクロでファイルオープンする際に、シートカットの場合にエラーが発生しますか?
- エクセルマクロでのファイルオープン時、シートカットのファイルでエラーが発生する問題について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
今の設定だと、拡張子がxlsで無い場合、「.xls」を後ろに付けたファイル名が変数「aFile」に入ります。 ショートカットは、普段は見えないようになっていますが、拡張子は「.lnk」なので、保存ボタンを押した時、変数aFileに入るファイル名は「○○○.lnk.xls」になってしまいます。 GetSaveAsFilenameの所を以下の様に変更して見てください。 ショートカットの場合、本来のファイル名とパスが変数aFileに入るようになります。 aFile = Application.GetSaveAsFilename(InitialFileName:=TaskF & "\" & "*.xls")
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
「シートカット」→「ショートカット(*.lnk)」と読み替えます。 >エクセルマクロでファイルオープンでシートカットが使えない 何度読んでも、良く理解できない質問です。 *ロジックは間違いないけれども、こういうようには書きませんね。 ↓ >”Application.GetSaveAsFilename”にてファイルを指定して、 * >”Workbooks.OpenText Filename”にてファイルをオープンするときに、 >”Application.GetSaveAsFilename”にて指定したファイルがシートカットの時にエラーで停止する。 ショートカットをオープンするというのは、Workbooks.OpenText ではないはずですし、こういうロジックはマクロとしてはイレギュラーです。 >ファイルがシートカットの時にエラーで停止する。 ショートカットを作るという意味でしょうか。それなら、まったくコードが違います。 開けるときに、そのままなら、ショートカットなどを指定することは出来ないはずです。 >(1)マクロは、汎用性を持たせるためリンク指定、実ファイル指定のどちらでも実行させるようにしたい。 リンク指定なら、その拡張子で、切り替えるようにしなければなりません。 エラーそのものよりも、全体のロジックがどうなっているか、どういうことをしたいのか、フォルダは、ネットワーク(仮想)か、物理的フォルダなのか、まず、今までのコードは忘れて、どういう仕様でマクロを実行させたいのか、最初から構築したほうが早いような気がします。話を理解すれば、コードは作れますが、今のままで、切ったり貼ったりという方式では不可能だと思います。 それと、ファイルを開くことと、ファイルを閉じることとは、話が別です。
お礼
Wendy02様 回答ありがとうございました。
- mt2008
- ベストアンサー率52% (885/1701)
ANo.1です。 > ご指摘通りの変更をしましたが同じエラーで停止しています。 エラーの内容を提示してください。 また、ちゃんと動くコードがあるのでしたら、なぜそちらを使わないのですか?
お礼
mt2008様 No.1の方法で解決しました。 ありがとうございます。 本当に助かりました。 エラーメッセージを確認するために再度書き直して実行したら問題なく実行することが出来ました。 本当に本当にありがとうございます。
お礼
回答ありがとうございます。 ご指摘通りの変更をしましたが同じエラーで停止しています。 追加で申し訳ありませんが下記の項目追加させてください。 (1)マクロは、汎用性を持たせるためリンク指定、実ファイル指定のどちらでも実行させるようにしたい。 (2)以前に同じようなマクロがあり、それは実ファイル、リンクファイルとも実行が出来た。 (作成された方が会社を変えられたため連絡が出来ません・・・知りません) ■実行が出来るマクロ 同じようなマクロですが下記の場合には、リンクでも実ファイルでも問題なく実行出来ます。。。 Dim aFile As Variant Rem aFile = Application.GetOpenFilename _ ("案件内容転記 (*.xls), *.xls", , , , True) If IsArray(aFile) Then For i = 1 To UBound(aFile) Debug.Print i & ":", aFile(i) Next i Else Debug.Print aFile End If Workbooks.OpenText Filename:=aFile(1)
補足
再度確認してたところmt2008様のご指摘方法で問題なく動作します。