[[20040726015819]] 『マクロを使ってフォルダを開く方法』(コリアンダ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロを使ってフォルダを開く方法』(コリアンダ)

ハイパーリンクを使ってエクスプローラを起動し、特定のフォルダを開く方法はわかるのですが、ボタン、つまりマクロを使ってフォルダを開くにはどうしたらいいのでしょうか。コードを教えてもらえると助かります。できればもっとも簡単な。


 API の ShellExecute関数を使うと出来ます。 

 <標準モジュール>

 Declare Function ShellExecute _
 Lib "shell32.dll" _
 Alias "ShellExecuteA" _
 (ByVal hwnd As Long, _
 ByVal lpOperation As String, _
 ByVal lpFile As String, _
 ByVal lpParameters As String, _
 ByVal lpDirectory As String, _
 ByVal nShowCmd_ As Long) _
 As Long

 Sub sample()
    ShellExecute 0, "explore", "C:\windows\", "", "", 1
 end Sub

   (INA)


 私が興味があるのは、[なぜフォルダを開きたいか]です。
 次に何かしたいからフォルダを開くわけで...
 (kazu)


 私は自動作成(保存)されたファイルを
 ユーザーが確認(すぐに使用)できるように
 エクスプローラで対象フォルダを開くようなマクロをよく作ります。

  (INA)


 > ユーザーが確認(すぐに使用)できるように...対象フォルダを開くような

 なるほど、確かにそれはありますね。

 (kazu)

すみません。もう少し詳しく教えてください。このコードすべてを標準モジュールの下に置くということですね。F8を押しながらテストしてみましたが何もおきません。何が悪いのでしょうか。コマンドボタンはsheet1に作ってあります。

(コリアンダ)


 win98,excel2000 で動作確認済みです。
 ふつうに、ツール マクロ マクロ から実行してもダメですか?

  (INA)


失礼しました!コードの中のフォルダ名"Windows"を"Winnt"に直したらうまくいきました。Win2Kだったもので。ありがとうございます。

(コリアンダ)


 Shell関数でもいけますよ。

 Sub FolderOpen()
 Dim Dammy As Variant
 Dammy = Shell("explorer.exe c:\", vbNormalFocus)
 End Sub
 
ついでに INAさんに伺っておきたいのですが、
APIを利用する方法は
Shell関数の場合と比べて優位な部分がありますか?
もうちょっと突っ込んだ使い方ができるのでしょうか。
(KAMIYA)

 エクスプローラでフォルダを開くことだけを考えると、
 Shell関数で十分でしたね。すみません。

 >もうちょっと突っ込んだ使い方ができるのでしょうか。
 あまり詳しくないのですが、戻り値でエラーの種類を調べることが
 出来ることくらいかな・・

  (INA)

 >戻り値でエラーの種類を調べることが 出来る
うまく使えば便利かもしれませんね。
APIはまだまだ未知の領域で・・・。
(昔、APIを利用してワークシートに書かれた電話番号を
コールするマクロを試作したような気もしますが、
・・・行方不明。)
 
Webを少し探してみましたが、返り値がよくわからない。
32以下はエラーだよ、ってぐらいしか見つけていませんが、
面白そうなんで、自分で探してみます。
INAさん、回答ありがとうございました。
(KAMIYA)


 エクスプローラーのときは、ほとんど意味が無いですし、
 そもそも開けなければ、どのエラーでも関係ないのですけどね・・・

 Dim Ret As Long
 Dim ファイル名 As String
 Dim フォルダ名 As String
 Dim MSG As String

 ファイル名 = "explore"
 フォルダ名 = "C:\My Documents\"

 Ret = ShellExecute(0, ファイル名, フォルダ名, "", "", 1)

 'エラーチェック
 If Ret < 32 Then
    Select Case Ret
        Case 2:    MSG = "ファイルが見つかりません"
        Case 3:    MSG = "パスが見つかりません"
        Case 5:    MSG = "アクセス不可"
        Case 8:    MSG = "メモリオーバーフロー"
        Case 30:   MSG = "ファイルが使用中"
        Case 31:   MSG = "関連付けプログラムなし"
        Case Else: MSG = "その他エラー"
    End Select

    MsgBox "実行できませんでした。  " & Ret & ":" & MSG, vbExclamation, "エラー"

 End If

 >APIはまだまだ未知の領域で・・・。
 楕円形のユーザーフォームを作っていますが、難しいです・・・(-_-;)

  (INA)

 サンプルまで作っていただいて大感謝です。
探しましたが、適当なのを見つけられずにいたんで、
「渡りに船」とはまさにこのことですね。
せっかくだから早速何かに使えないか、
ついつい考えてしまうのは悪いクセ。
しかし、
> 楕円形のユーザーフォーム
とは、INAさん、おそるべし。
 
結果的に相談者の(コリアンダ)さんのスレッドを
お借りしてしまいました。ありがとうございます。
(KAMIYA)


 >探しましたが、適当なのを見つけられずにいたんで、

 こんなの見つけました。
  ↓ 
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B170918

  (INA)


 INAさん、再々のご協力感謝!!です。
試してみまっす。
(KAMIYA)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.