dポイントプレゼントキャンペーン実施中!

 Win2000でEXCEL97を使ってます。
 ExcelVBAでダイアログボックスなどによりユーザーにフォルダを指定させたいのです。
 ファイルを指定させるには、GetOpenFileNameメソッドを使えば出来ることは分かったのですが、フォルダを指定させるような方法が分からないのです。
 本で読んだところでは、Excel2002ではFileDialogプロパティで可能なようなのですが、Excel97では出来ないようで…
 97でも可能な方法があればご教授下さい。
 よろしくお願いします。

A 回答 (17件中1~10件)

こんな感じで。


[標準モジュール側]
Option Explicit

Public FILEPATH As String

Public Sub FilePathGet()
UserForm1.Show vbModal
MsgBox FILEPATH
End Sub

[ユーザーフォーム側]
Option Explicit

Private Sub UserForm_Activate()
Dim I As Integer
Dim strFileName As String
Dim strWorkFileName As String
Dim strCurrentDirectory As String
Dim strCurrentDrive As String
'ドライブ名の保存
strCurrentDrive = Left$(CurDir$, 1)
'ディレクトリ名の保存
strCurrentDirectory = CurDir$

'読み込み専用のチェックボックスを隠す&エクスプローラスタイル
CommonDialog1.Flags = cdlOFNHideReadOnly + cdlOFNExplorer
'規定値をテキストファイルだけ抽出するように設定
CommonDialog1.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*"
'キャンセル時のエラーナンバーを取得するように設定
CommonDialog1.CancelError = True
'エラーが発生してもプログラムを続行
On Error Resume Next
'コモンダイアログウインドウを「ファイルを開く」形式で表示
CommonDialog1.ShowOpen
'キャンセル時の処理
If Err.Number = cdlCancel Then
'エラーのクリア
On Error GoTo 0
'Command_Endに飛ぶ。
GoTo Command_End
End If
'その他のエラー時の処理
If Err.Number <> 0 Then
'エラーの番号と、エラーメッセージを表示
MsgBox Format$(Err.Number) & ":" & Err.Description, vbOKOnly + vbExclamation, "エラーです。(T_T)"
'Command_Endに飛ぶ。
GoTo Command_End
End If
strFileName = CommonDialog1.Filename
For I = Len(strFileName) To 1 Step -1
If Mid$(strFileName, I, 1) = "\" Then
'ファイルのパス名を取得する。
FILEPATH = Mid$(strFileName, 1, I - 1)
Exit For
End If
Next

Command_End:
'ドライブを元に戻す。
ChDrive strCurrentDrive
'ディレクトリを元に戻す。
ChDir strCurrentDirectory

Unload Me
End Sub
    • good
    • 0
この回答へのお礼

みなさま本当にありがとうございました。
非常に勉強になりました。
うまくいきそうです。
特に、kakusukeさん、2chさん、たくさんのご回答ありがとうございます。
どちらを20ptにすればいいのか悩みましたが、2chさんには申し訳ありませんが、先着のkakusukeさんに20ptとさせていただきました。
またよろしくお願いします。

お礼日時:-0001/11/30 00:00

Q.#2の方法で、・・・とエラーが返されてしまいます。

やり方違いますか?
A.こちらも同じエラーが出た

Q.VB.NETだったら・・・VB6.0とかよりも良くないんでしょうか。
A.あまりVB.NETの必要性を感じておりません。
まわりにも.NETユーザがおりません。
ここの掲示板もそうだけど、どこでも、
環境:VB.NET
と書いてあると、一気にレスが減ります。
それに将来性もあまり無いように思います。
MS曰く「XMLとの連携が・・・」
というのがあるけど、VB6でも、ある程度はできます。

PGなの?
VBAができるならVB6がよいと思うけど、他の人と差をつけたいのであれば、別のスキルを積んでおいた方がよいと思う。
オブジェクト指向言語を理解すると、VBのスキルも自然に上がると思うし。
だからC・Javaなど

あとは脱Winをすると、なお良い。Unix系
    • good
    • 0

>フォーム(EXCELではユーザーフォーム)が無いと出来ないみたいです。



いやOCXを参照設定したら、オブジェクトをコーディングで生成することが可能。


[ウィンドウズ\system32\Comdlg32.ocx]を参照設定

Private Sub Test()
  On Error GoTo PGMERR
  Dim objDlg As CommonDialog
  Set objDlg = New CommonDialog
  
  With objDlg
    .CancelError = True
    .DialogTitle = "ぱけらった"
    '↓どっちか1個だけ
    '.Flags = cdlOFNHideReadOnly Or cdlOFNCreatePrompt  '存在しないファイルを作成する場合
    '.Flags = cdlOFNHideReadOnly Or cdlOFNFileMustExist '存在しないファイルを許さない場合
    .InitDir = Environ("windir")
    .Filter = "テキスト ファイル (*.txt)|*.txt|ピクチャ (*.bmp;*.ico)|*.bmp;*.ico"
    .Filename = "Format.exe"
    
    .ShowOpen
    MsgBox .Filename
  End With
  
PGMEND:
  Set objDlg = Nothing
  Exit Sub
PGMERR:
  MsgBox "キャンセルした"
  GoTo PGMEND
End Sub
    • good
    • 0

#2です。



フォーム(EXCELではユーザーフォーム)
が無いと出来ないみたいです。

もともとフォームに貼り付けて
使うものですし。

マクロが実行するタイミングで
フォームを読み込んで使用してください。
(xxxx(フォーム名).SHOW)
とモジュールに書き込むとフォームが開かれ、
Form_Activateイベント内で、
コモンダイアログの
SHOWを行って、
コモンダイアログウィンドウを
閉じるときに、
UNLOAD フォーム名
と打ってあげれば大丈夫です。

結構端折ってます。
分からない場合は
スレッドを新たに立てて頂いたら、
飛んでいきます。
    • good
    • 0

>#2の方法で、


>「COMDLG32.DLLを参照設定」
>とありますが、
>Excel Visual Basic Editorで
>「ツール」→「参照設定」→「参照」ボタンで、
>COMDLG32.DLLを選択しても、
>「指定されたファイルへの参照は登録できません」
>とエラーが返されてしまいます。
>やり方違いますか?

#2です。
合ってます。
もしかして、
「commdlg.dll」
を参照しようとした
とかいうことはないですよね?
「COMDLG32.dll」は、
ふつうの「ファイルを指定して保存」の
画面などを表示させるためのものですから、
参照不可ということは無いです。

>VB.NETだったら…
>VB6.0とかよりも良くないんでしょうか。

そんなことは無いですが、
.NETは
まだまだバグが出てくるようなので、
VB6.0のほうがまだましってだけです。
むしろ、ACCESSのモジュールを作るなどして、
勉強したほうが、安上がりでなおかつ、
クライアント/サーバー型の
アプリケーション開発の
効率のよい勉強になると思います。
    • good
    • 0

>vbscriptで


デバッグはメッセージボックスを途中で表示するなり、ファイルにはいたりする、昔ながらの方法でやるのが一番かと

>SとAを打ち間違えたと思ったんですが?
質問者不在で、質意と違う展開になりつつあり

っていうかスレ起こせよw
おもしれー

この回答への補足

 質問者です。
 たくさんの書き込みありがとうございます。
 知識不足で難しいことも多いですが勉強になります。
 いろいろ質問したいことがあるのですが、それは改めて質問させていただくとして…
 少しだけ質問させてください。
 #2の方法で、「COMDLG32.DLLを参照設定」とありますが、Excel Visual Basic Editorで「ツール」→「参照設定」→「参照」ボタンで、COMDLG32.DLLを選択しても、「指定されたファイルへの参照は登録できません」とエラーが返されてしまいます。やり方違いますか?
 ちなみに、2chさんのご指摘どおり、VBは持っておらず、使ったこともありません(ToT)。ExcelVBAのみです。VBを使ってみたいと思うのですが、結構高価なようで…。VB.NETだったら1万円台だと思うのですが、安い分、VB6.0とかよりも良くないんでしょうか。

補足日時:2003/06/27 00:03
    • good
    • 0

vbscriptで


debug.printやってどうなるんでしょう?

ってことで、
SとAを打ち間違えたと思ったんですが?

ちゃいますかね?
    • good
    • 0

召喚成功!感謝!



平日のお昼過ぎに、召喚し易いキャラだw

試しにARC氏も召喚したいが、失敗しそうなので、やめておこう
    • good
    • 0

呼んだ?



>1.VBSって何でしょうか?
WSHのことしょう。
フリーでVBモドキを動かせます。

参考URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop. …
    • good
    • 0

こんなスレ発見



参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=564664
    • good
    • 0

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


このQ&Aを見た人がよく見るQ&A