|
▼はてな さん:
標準モジュールに記載してください。
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
|
|