|
ありがとうございます。
試してみます。
▼独覚 さん:
>▼はてな さん:
>標準モジュールに記載してください。
>Sheet1のA1セルに記入されているパスがファイルエクスプローラーで開かれているかをチェックします。
>
>「Sub DirChk()」の
>> If CHK_FLG Then
>> MsgBox "開いてない"
>> Else
>> MsgBox "開いてる"
>> End If
>に実際に行いたい処理を入れてください。
>また、今は大文字・小文字の区別をしないようにしています。
>区別させたい場合は
>>' If CHK_DIR = CHK_Collection(Loop_CNT) Then '大文字(A)と小文字(a)を区別する
>> If StrConv(CHK_DIR, vbUpperCase) = StrConv(CHK_Collection(Loop_CNT), vbUpperCase) Then
>部分のコメントを逆にしてください。
>なお、「Function getOpenDirList() As Collection」のほうは
>
>ht tp://grayskybluesea.wordpress.com/2010/05/14/vba%E3%81%A7%E3%80%81%E9%
>96%8B%E3%81%84%E3%81%A6%E3%81%84%E3%82%8B%E3%83%95%E3%82%A9%E3%83%AB%E3%83%
>80%E3%83%91%E3%82%B9%E3%82%92%E5%85%A8%E3%81%A6%E5%8F%96%E5%BE%97%E3%81%99%
>E3%82%8Bfunction/
>
>
>を元にしています。
>(ほとんどそのままですが)
>
>Sub DirChk()
>
> Dim CHK_DIR As String
> Dim CHK_FLG As String
> Dim CHK_Collection As Collection
> Dim CHK_DIR_CNT As Integer
> Dim Loop_CNT As Integer
>
> CHK_DIR = Worksheets("Sheet1").Range("A1")
>
>' パスの最後に"\"があれば削除する
> If Right(CHK_DIR, 1) = "\" Then
> CHK_DIR = Left(CHK_DIR, Len(CHK_DIR) - 1)
> End If
>
> Set CHK_Collection = getOpenDirList()
> CHK_FLG = True
>
> CHK_DIR_CNT = CHK_Collection.Count
>
> If CHK_DIR_CNT > 0 Then
> For Loop_CNT = 1 To CHK_DIR_CNT
>' If CHK_DIR = CHK_Collection(Loop_CNT) Then '大文字(A)と小文字(a)を区別する
>
> If StrConv(CHK_DIR, vbUpperCase) = StrConv(CHK_Collection(Loop_CNT), vbUpperCase) Then
> CHK_FLG = False
> Exit For
> End If
> Next
> End If
>
> If CHK_FLG Then
> MsgBox "開いてない"
> Else
> MsgBox "開いてる"
> End If
>
>End Sub
>
>
>Function getOpenDirList() As Collection
> Dim s As String
> Dim res As New Collection
> Dim sh As Object
> Dim wcobj As Object
> Dim wobj As Object
> Dim result As String
> Dim i As Integer
>
>'オブジェクトの取得
> Set sh = CreateObject("Shell.Application")
>
>'コレクションオブジェクトの取得
> Set wcobj = sh.Windows
>
> For Each wobj In wcobj
>'Internt Explorerが開いているファイルは除外する。
> If (wobj.FullName Like "*Explorer.EXE") = True Then
> s = wobj.LocationURL
>'オブジェクトフォルダは除外する
> If Left(s, 10) <> "file:///::" Then
>' 最初の"file:///"を取り除く
> If s Like "file:///?:*" Then
>
>'ローカル
> s = Right(s, Len(s) - Len("file:///"))
> Else
>
>'サーバ
> s = Right(s, Len(s) - Len("file:"))
> End If
>
>' 左から1文字ずつチェックして文字列を置き換えていく
> result = ""
> For i = 1 To Len(s)
> Select Case Mid(s, i, 1)
> Case "/"
> result = result & "\"
> Case "%"
> result = result & Chr(CInt("&H" & Mid(s, i + 1, 2)))
> i = i + 2
> Case Else
> result = result & Mid(s, i, 1)
> End Select
> Next
> res.Add (result)
>
> End If
> End If
> Next
> Set getOpenDirList = res
>End Function
|
|