Excel VBA Shell – Jak z poziomu Excel sterować programami

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 🙂 .
Kurs Excel VBA - cmd Shell z poziomu Excel VBA
Kurs Excel VBA – CMD Shell z poziomu Excel VBA

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łaWartośćOpis
vbHide0Program uruchamia się w oknie w tle. Okno programu jest niewidoczne.
vbNormalFocus1Program uruchamia się w widocznym oknie w normalnym rozmiarze. Okno nowego programu staje sie obecnie aktywnym oknem.
vbMinimizedFocus2Program uruchamia się w oknie w zminimalizowanym rozmiarze. Okno nowego programu staje sie obecnie aktywnym oknem.
vbMaximizedFocus3Program uruchamia się w oknie w pełnym rozmiarze. Okno nowego programu staje sie obecnie aktywnym oknem.
vbNormalNoFocus4Program uruchamia się w ostatnio użytkowanym rozmiarze okna i ostatnio użytkowanej pozycji na ekranie. Obecnie użytkowane okno pozostaje aktywne.
vbMinimizedNoFocus6Program 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")
Kurs Excel VBA - Jak uruchomić inny program z Excela VBA
Kurs Excel VBA – Jak uruchomić inny program z Excela VBA

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:

kurs_excel_vba_cmd_shell.xlsm

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *