Public Sub runAccFile(acapName$) Dim Locator As Object Set Locator = CreateObject("WbemScripting.SWbemLocator") Dim Service As Object Set Service = Locator.ConnectServer Dim Procs As Object Set Procs = Service.ExecQuery("Select * From Win32_Process") Dim swF As Boolean Dim Proc As Object For Each Proc In Procs If Proc.Description = "msaccess.exe" Then Dim cmdl$: cmdl$ = Proc.Properties_("CommandLine") Debug.Print CStr(Proc.ProcessId), cmdl$ If InStr(cmdl$, acapName$) > 0 Then swF = True AppActivate Proc.ProcessId End If End If Next If Not swF Then Dim acp$: acp$ = Application.SysCmd(acSysCmdAccessDir) & "MSACCESS.EXE" Shell (acp$ & " """ & CurrentProject.Path & "\" & acapName$ & """") End If Set Proc = Nothing Set Procs = Nothing Set Service = Nothing Set Locator = Nothing End Sub
Descriptionで判断するのは間違っているのかなぁ、、 CommandLineの取得もProperties_経由とかしないと行けないの? Proc.CommandLineとかで参照できると見た目が綺麗なんだけど、、
後、既に起動していたらアクティプにする。これ大事だね、、
虫歯Y.Tの件は保留、、
あと、VBAって進化止まっているけど、良い言語だと思うなぁ、、
可読性の面で、変数宣言と初期化が同時にできれば嬉しいなぁ、、
無駄な変数宣言や無駄な初期化をする人、減ると思うのさ、、令和元年に