プロが教えるわが家の防犯対策術!

エクセルマクロでファイルオープンでシートカットが使えない

エクセルのVBAマクロについて教えて下さい。
”Application.GetSaveAsFilename”にてファイルを指定して、”Workbooks.OpenText Filename”にてファイルをオープンするときに、”Application.GetSaveAsFilename”にて指定したファイルがシートカットの時にエラーで停止する。
もし、”Application.GetSaveAsFilename”が実際のファイルの場合には、エラーで停止しない。

■実際のVBA
aFile = Application.GetSaveAsFilename(InitialFileName:=TaskF & "\" & "*.xls", FileFilter:="Excel(xls)ファイル (*.xls),*.xls")


Workbooks.OpenText Filename:=aFile  ←左記の箇所でエラー停止する。

A 回答 (3件)

今の設定だと、拡張子がxlsで無い場合、「.xls」を後ろに付けたファイル名が変数「aFile」に入ります。


ショートカットは、普段は見えないようになっていますが、拡張子は「.lnk」なので、保存ボタンを押した時、変数aFileに入るファイル名は「○○○.lnk.xls」になってしまいます。

GetSaveAsFilenameの所を以下の様に変更して見てください。
ショートカットの場合、本来のファイル名とパスが変数aFileに入るようになります。

aFile = Application.GetSaveAsFilename(InitialFileName:=TaskF & "\" & "*.xls")

この回答への補足

再度確認してたところmt2008様のご指摘方法で問題なく動作します。

補足日時:2010/07/05 18:25
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘通りの変更をしましたが同じエラーで停止しています。

追加で申し訳ありませんが下記の項目追加させてください。
(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)

お礼日時:2010/07/05 13:07

「シートカット」→「ショートカット(*.lnk)」と読み替えます。



>エクセルマクロでファイルオープンでシートカットが使えない

何度読んでも、良く理解できない質問です。

*ロジックは間違いないけれども、こういうようには書きませんね。
    ↓
>”Application.GetSaveAsFilename”にてファイルを指定して、 *
>”Workbooks.OpenText Filename”にてファイルをオープンするときに、
>”Application.GetSaveAsFilename”にて指定したファイルがシートカットの時にエラーで停止する。

ショートカットをオープンするというのは、Workbooks.OpenText ではないはずですし、こういうロジックはマクロとしてはイレギュラーです。

>ファイルがシートカットの時にエラーで停止する。

ショートカットを作るという意味でしょうか。それなら、まったくコードが違います。

開けるときに、そのままなら、ショートカットなどを指定することは出来ないはずです。

>(1)マクロは、汎用性を持たせるためリンク指定、実ファイル指定のどちらでも実行させるようにしたい。
リンク指定なら、その拡張子で、切り替えるようにしなければなりません。

エラーそのものよりも、全体のロジックがどうなっているか、どういうことをしたいのか、フォルダは、ネットワーク(仮想)か、物理的フォルダなのか、まず、今までのコードは忘れて、どういう仕様でマクロを実行させたいのか、最初から構築したほうが早いような気がします。話を理解すれば、コードは作れますが、今のままで、切ったり貼ったりという方式では不可能だと思います。

それと、ファイルを開くことと、ファイルを閉じることとは、話が別です。
    • good
    • 0
この回答へのお礼

Wendy02様
回答ありがとうございました。

お礼日時:2010/07/05 18:23

ANo.1です。



> ご指摘通りの変更をしましたが同じエラーで停止しています。

エラーの内容を提示してください。

また、ちゃんと動くコードがあるのでしたら、なぜそちらを使わないのですか?
    • good
    • 0
この回答へのお礼

mt2008様

No.1の方法で解決しました。
ありがとうございます。
本当に助かりました。

エラーメッセージを確認するために再度書き直して実行したら問題なく実行することが出来ました。
本当に本当にありがとうございます。

お礼日時:2010/07/05 18:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!