Systémovými dialogy myslím především dialogy patřící pod Ovládací panely systému Windows. Lze je spouštět programově? V řadě případů ano. Podívejme se kupříkladu na dialog Datum a čas.
1 2 3 4 5 6 7 8 9 | Sub SystemovyDialogShellApp() 'objekt Shell Set objShell = CreateObject("Shell.Application") 'dialog Datum a čas objShell.ControlPanelItem "timedate.cpl" End Sub |
Tento způsob je ovšem zastaralý a samotný Microsoft doporučuje jinou cestu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Sub SystemovyDialogShell() 'Windows 7, 64 bit Dim obj As Object Set obj = CreateObject("WScript.Shell") 'dialog Datum a čas (použit kanonický název) 'obj.Run "%windir%\system32\control.exe -name Microsoft.DateAndTime" 'zjednodušeně: obj.Run "control.exe -name Microsoft.DateAndTime" 'alternativně: 'obj.Run "control.exe timedate.cpl" 'dialog Datum a čas, druhá záložka (záložky indexovány od nuly) 'obj.Run "control.exe -name Microsoft.DateAndTime -page 1" 'alternativně: 'obj.Run "control.exe timedate.cpl,,1" End Sub |
Podrobnější nápovědu najdete na stránkách Executing Control Panel Items a Control Panel Canonical Names.
Technologie Microsoftu doprovází ovšem schizofrenie. Dialogy se v průběhu času měnily, mizely a přeskupovaly se záložky, pro některé vznikly samostatné spouštěcí soubory.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Sub SystemovyDialogUcty() 'Windows 7, 64 bit Dim obj As Object Set obj = CreateObject("WScript.Shell") 'uživatelské účty obj.Run "control.exe -name Microsoft.UserAccounts" 'uživatelské účty podruhé obj.Run "%windir%\system32\netplwiz.exe" End Sub |
Ukázali jsme si, jak systémové dialogy vyvolávat. Změny v nich už necháváme na uživateli a ručním vstupu. Rozhodně nedoporučuji nasazovat z VBA nějaké „SendKeys“. Pokud už musíte něco v systému programově měnit, používejte API nebo WMI.