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

下記マクロを実行すると、新しくフォルダが開き、タスクバーに増えていきます。
タスクバーに同じフォルダがあるときは、タスクバーのフォルダを開く方法はないでしょうか。
よろしくお願いします。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

質問者からの補足コメント

  • うーん・・・

    マクロ初心者で、検索すると質問のマクロを見つけました。
    タスクバーのフォルダを開くマクロを探したのですが、
    うまく見つけることが、できませんでした。
    エクスプローラで開く目的は特に無いです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/05/19 14:59

A 回答 (3件)

試しに作ってみました。

超ヘビーな内容になってしまいます。
wmi で作る予定でしたが、このほうがまだましなのかもしれません。
以下の
If myCap Like "ローカル*" Then '**

のキャプションの名称を予め記録しておいて、書き出しておきます。
それを そのセンテンスの Like "●●●*" とワイルドカードを入れて設定してください。ただ、実用には、かなり疑問がつくプログラムです。

こちらは、Windows 10 ですが、Explorer のClass 名が変更されたのはいつかは分かりませんが、下位バージョンの時は、ExplorerWClass ですから、FindWindow で、Hwnd が取れるのを確認してから実行してください。今回は、久々にちゃんと出来たようです。
Excel は、32bit 版でお願いします。OS側は関係ありません。もし、64bit 版ですと、以下、API関数のすべてを書き直さなくてはなりません。

'//標準モジュール
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function IsWindowVisible Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
'Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetNextWindow Lib "user32.dll" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const GW_HWNDLAST = &H1
Private Const GW_HWNDNEXT = &H2

Private Const SW_MAXIMIZE As Long = &H3
Private Const SW_MINIMIZE As Long = &H6
Private Const SW_RESTORE As Long = &H9

Private Const HWND_TOPMOST As Long = &HFFFF
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOMOVE As Long = &H2


Sub GetCaption()
Dim hwnd As Long
Dim strCaption As String * 50
' Dim strClassName As String * 50
Dim myCap As String
hwnd = FindWindow("CabinetWClass", vbNullString)
If hwnd = 0 Then
 MsgBox "エクスプローラーは立ち上がっていません。"
 'ここで、MsgBox の代わりに、OpenFolders()を呼び出しも可能
  Exit Sub 
End If
Do
 If IsWindowVisible(hwnd) Then
  DoEvents
  GetWindowText hwnd, strCaption, Len(strCaption)
  If strClassName Like "CabinetWClass*" Then Stop
  myCap = Left(strCaption, InStr(strCaption, vbNullChar) - 1)
  If myCap Like "ローカル*" Then '**
  ShowWindow hwnd, SW_RESTORE
  SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
  Exit Do
  End If
 End If
 hwnd = GetNextWindow(hwnd, GW_HWNDNEXT)
Loop Until hwnd = GetNextWindow(hwnd, GW_HWNDLAST)
If myCap = "" Then
 Call OpenFolders
End If
End Sub
'
Sub OpenFolders()
Dim targ As String
targ = "C:\" 'キャプションが「ローカル」になる
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

'//
    • good
    • 0
この回答へのお礼

マクロの内容は理解できませんでしたが、コピペで実行するとフォルダを重複せずに開く事ができました。
簡単は、マクロでできると思って試行錯誤していましたが、結局できず今回質問させて貰いました。

マクロまで作って頂き本当にありがとうございました。

お礼日時:2018/05/21 11:14

しばらく考えてみて、起動後のタスクバーにあるプログラムなどから、特定のプログラムをゲットして実行するワザというものを思い出しました。

wmi を使うのだろうとは思いますが、pid から、handle にするとか、初心者とか中級というレベルの話ではないし、単なる興味だけでは、到底届かないものです。VBAでも使いますが、それとは別のカテゴリのプログラムです。

wmi の中に、そのものずばりはありませんが、以下が参考になるでしょう。
http://www.wmifun.net/

また、VBAには、フォルダー名を取得するダイアログがありますから、それを使うのが良いです。
Application.FileDialog(msoFileDialogFolderPicker)
    • good
    • 0
この回答へのお礼

操作的には、タスクバーのフォルダをクリックするだけなので
簡単なマクロなのだと思い、いろいろ検索したのにそれらしいマクロが
見つからない理由が、分かりました。簡単ではないのですね。。。

『フォルダー名を取得するダイアログ』の使い方調べてみます。

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

お礼日時:2018/05/20 07:10

エクスプローラを開く目的はなんでしょう?

この回答への補足あり
    • good
    • 0

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