アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォルダの参照ダイアログボックスを使用して
ファイルを選択できるようにしています。

プログラムでcsv形式で保存し、そのcsv形式ファイルを指定して開くという動作を目的としています。
そのファイル選択を固定でなく可変で選択したいと思っています。

Dim ShellApp As Object
Dim oFolder As Object
Set ShellApp = CreateObject("Shell.Application")
Set oFolder = ShellApp.BrowseForFolder(0, "ファイル選択", &H4000,"C:\test")

msgbox(oFolder)

このような感じで、フォルダのみではなくファイルを指定することに成功しました。
しかし、このフォルダ参照ダイアログが表示されたときに、何も選択せずに
キャンセルボタンをクリックするとエラーが出て止まってしまいます。
目的とする動作はできてはいるのですが、キャンセルするとエラーになるので、この原因がわからず困っています。

キャンセルボタンに関することを記述する必要があるのでしょうか?

また、この他にファイルを指定するのに適した方法がありましたら教えてください。
参照するフォルダを指定しているのでパスの取得は必要ありません。
ファイルが選択できたらOKです。
フォルダのパス取得のプログラムはよくサンプルを見かけるのですが、
ファイル選択のサンプルはあまり見かけないです(-_-;)

また、この方法ではC:\と絶対パスで指定していますが、exeファイルが存在する場所からの相対パスでの指定はできないのでしょうか?

csvで保存する時は"./test/test.csv"などと記述して書き込みできていたのですが、
このようなパスを書くとエラーとなりファイルを見つけられないといわれてしまいます。

A 回答 (2件)

通常のWindowsアプリケーションはファイルを指定する時、「ファイルを開く」ダイアログなるダイアログをみんな出しています。


これで指定するのが自然です。フォルダを参照ダイアログはあくまでも「フォルダ」を指定するものなので。

さて。
ファイルを開くダイアログはどう出すかですが、
GetOpenFileName
というAPI関数を呼べば出せます。
簡単にここに書ければよいのですが、宣言が長くて見る気になれなそうなので参考URLを紹介するだけにしておきます。
下の方にサンプルがあるみたいなので(見てませんが)、ご参考になるかも。

VB6.0のつもりで書いてますが、VBAでもOKです。
.NETの場合は・・・はて?同じ?

そうそう。
あとは、コモンダイアログコントロールを使うって方法もありますが。これはVB6.0はOK。VBAはムリ。

参考URL:http://www.h5.dion.ne.jp/~p-s-s/vb/api/fileopen. …
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
おかげで解決できました。

お礼日時:2005/10/12 20:40

エラーの原因は、キャンセルしたときBrowseForFolderが返す値がオブジェクトではないため、その次のmsgboxで表示できないことにあります。



なお、エラーの「原因」はともかく、発生場所くらいは自分で調べられるはずです。例えば1行ごとにメッセージ表示を追加して、エラーが発生するまでにどのメッセージまで表示されたかを確認する等の方法です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
発生場所はわかっていましたが、原因がよくわかりませんでした。

なんとか解決できました。

お礼日時:2005/10/12 20:41

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