1. CMD Shell w VBA Excel – czym jest i jak z niego korzystać
W tym artykule dowiesz się jak z poziomu Microsoft Excel sterować innymi programami systemu Windows. Jeśli próbujesz za pomocą Excela wykonać dowolne działanie w systemie Windows, do wszystkich tych działań służy Command Shell systemu Windows, a więc tzw. wiersz poleceń. Sam wiersz poleceń możesz uruchomić w prosty sposób wpisując w menu Start polecenie CMD. Po jego uruchomieniu zobaczysz dobrze Ci znane okno wiersza poleceń systemu Windows. Command Shell z poziomu VBA Excel umożliwa m.in:
- Uruchamianie dowolnych programów z poziomu Excela, w tym np uruchamianie makrem innego pliku Excel.
- Sterowanie zadaniami systemu Windows
- Zarządzanie plikami i katalogami na dysku, a więc kopiowanie, usuwanie, zmiana nazwy plików (przy użyciu plików batch file).
- I praktycznie każde działanie, które mógłbyś wykonać za pomocą wiersza poleceń systemu Windows, jak np sformatowanie dysku 🙂 .
W tym artykule skupimy się na 3 pierwszych punktach, a więc uruchamianiem programów, sterowaniem zadaniami systemu Windows oraz zarządzaniem plikami.
2. Składnia funkcji Shell w VBA Excel
W jaki sposób najprościej skorzystać z Command Shell poprzez VBA? Wpisz w treści kodu funkcję Shell i podaj właściwe argumenty wg. poniższej składni:
'tomaszkenig.pl Shell(PathName, [WindowStyle As VbAppWinStyle = vbMinimizedFocus]) As Double
PathName – Ścieżka pliku, który chcemy uruchomić, lub nazwa programu.
WindowStyle – Argument opcjonalny. Możesz określić w jakim trybie uruchomi się program. Poniżej wszystkie opcje, które możemy wykorzystać w tym argumencie. To, czy wprowadzimy w argumencie stałą np vbHide, czy np wartość = 0, nie ma znaczenia dla działania polecenia. Są one równoważne. Jeśli nie wypełnimy tego argumentu, argumentem default jest 1, a więc vbNormalFocus.
Stała | Wartość | Opis |
vbHide | 0 | Program uruchamia się w oknie w tle. Okno programu jest niewidoczne. |
vbNormalFocus | 1 | Program uruchamia się w widocznym oknie w normalnym rozmiarze. Okno nowego programu staje sie obecnie aktywnym oknem. |
vbMinimizedFocus | 2 | Program uruchamia się w oknie w zminimalizowanym rozmiarze. Okno nowego programu staje sie obecnie aktywnym oknem. |
vbMaximizedFocus | 3 | Program uruchamia się w oknie w pełnym rozmiarze. Okno nowego programu staje sie obecnie aktywnym oknem. |
vbNormalNoFocus | 4 | Program uruchamia się w ostatnio użytkowanym rozmiarze okna i ostatnio użytkowanej pozycji na ekranie. Obecnie użytkowane okno pozostaje aktywne. |
vbMinimizedNoFocus | 6 | Program uruchamia się w zminimalizowanym oknie. Obecnie użytkowane okno pozostaje aktywne. |
3. Jak uruchomić dowolny program z poziomu Excel VBA
Za pomoc wiersza poleceń możesz uruchamiać m.in. wybrane programy dostarczone wraz z systemem Windows, jak Paint, Notatnik itp. By to zrobić wpisz w pierwszym argumencie funkcji Shell nazwę programu w cudzysłowie:
'tomaszkenig.pl shell_1 = Shell("notepad") shell_2 = Shell("mspaint") shell_3 = Shell("excel")
Jeśli chcesz uruchomić konkretny plik za pomocą konkretnego programu, np plik Excel uruchomić za pomocą MsExcel, wprowadź w argumencie funkcji Shell nazwę programu, a po spacji plik, który chcesz w nim otworzyć:
'tomaszkenig.pl shell_4 = Shell("excel d:\Zeszyt1.xlsx") 'lub shell_5 = Shell("Scieżka_do_programu_excel d:\Zeszyt1.xlsx")
By uruchomić dowolny plik z poziomu Excel VBA używając do tego domyślego programy ustawionego w systemie Windows, wpisz w argumencie funkcji: explorer.exe, a po spacji ścieżkę pliku, który chcesz uruchomić.
'tomaszkenig.pl shell_6 = Shell("explorer.exe d:\Zeszyt1.xlsx")
W ten sposób otworzyłeś za pomocą Excel inny plik Excel, korzystając z VBA.
4. Jak kopiować, przenosić i usuwać pliki i katalogi z poziomu Excel VBA
Spośród prostych poleceń służących do zarzadzania danymi na dysku możemy m.in.:
- kopiować pliki
- usuwać pliki
- zmieniać nazwy plików
W jaki sposób to zrobić? By korzystać z wyżej wymienionych poleceń powinniśmy utworzyć na dysku pliki z rozszerzeniem bat, tzw. Batch files. Plik bat w swojej treści powinnien posiadać polecenie kopiowania, kasowania lub np zmiany nazwy plików. Jeśli natomiast chciałbyś do poleceń podstawiac parametry, to nie jest to możliwe z poziomu funkcji Shell. Służą do tego osobne funkcjie języka VBA.
Usuwanie plików:
Jeśli chcesz usunąć za pomoca VBA dowolny plik utwórz plik tekstowy i nazwij go np usuwanie.bat. W treści pliku wpisz własciwe polecenie, a więc np:
DEL c:\katalog\plik.rozszerzenie , by usunąć konkretny plik w katalogu
lub
DEL c:\katalog\* , by usunąć całą zawartość katalogu.
Teraz, gdy chcesz uruchomić swój plik bat, uyj funkcji shell w nastepujący sposób:
'tomaszkenig.pl usuwanie= Shell("ścieżka_pliku\nazwa_pliku.bat")
Kopiowanie:
Treść pliku bat, jeśli chcesz skopiować dowolny plik do innego katalogu:
COPY c:\katalog\plik.rozszerzenie c:\nowy_katalog\
Treść pliku bat, jeśli chcesz skopiować wszystkie pliki z danego katalogu do drugiego katalogu:
COPY c:\katalog\* c:\nowy_katalog\
Kod VBA Excel uruchamiający plik bat:
'tomaszkenig.pl kopiowanie= Shell("ścieżka_pliku\nazwa_pliku.bat")
Zmiana nazwy pliku:
Jeśli chesz zmienić nazwę konkretnego pliku, Twój plik z rozszerzeniem bat powinien wyglądac następująco:
RENAME C:\ścieżka_do_pliku\nazwa_pliku.rozszerzenie nowa_nazwa_pliku.roszerzenie
Program bat uruchom za pomocą kodu VB:
'tomaszkenig.pl zmiana_nazwy= Shell("ścieżka_pliku\nazwa_pliku.bat")
5. Jak wyłączyć komputer w VBA Excel
By zamknąć programy i wyłączyć komputer z poziomu MS Excel powinniśmy podobnie jak w jednym z poprzednich punktów utworzyć pliki z rozszerzeniem bat. Poniżej treści tych plików dla:
Wyłączenia komputera:
shutdown.exe /s
Restartu komputera:
shutdown.exe /r
Hibernacji:
shutdown.exe /h
Artykuł jest częścią kursu vba Excel. Całość kursu znajdziesz pod tym linkiem: Kurs VBA. Poniżej zamieszczam plik z kodem programu: