Bu öğretici, VBA Shell işlevinin nasıl kullanılacağını gösterecektir.
VBA'yı kullanabiliriz Kabuk Bir VBA programının içinden ayrı, yürütülebilir bir program çağırma işlevi. Örneğin Excel'den Notepad açmamız gerekirse, bunun için VBA Shell işlevini kullanabiliriz. Kabuk çağrısı başarılı olursa, çağırdığı programın Windows TaskID değerini döndürür. Kabuk çağrısı başarısız olursa, sıfır döndürür.
Kabuk iki giriş parametresi vardır: gerekli yol adı programın araması için ve isteğe bağlı bir pencere stili programın çalışacağı pencerenin stilini kontrol eden değer. NS yol adı değer, program yolunu / dizini ve argümanları içerebilir.
Çağrı Shell
Bu kod, çalıştırılacak bir makronun parçasını oluşturabilir not defteri kullanarak VBA Çağrısı aramak için komut Kabuk işlev.
1 | Çağrı Shell("not defteri", vbNormalFocus) |
Örneğin:
Kabuk Bekleme
VBA'yı kullanabiliriz Beklemek aramayı geciktirme komutu Kabuk Belirli bir süre için komut.
12 | Application.Wait (Now + TimeValue("00:00:05"))Çağrı Shell("not defteri", vbNormalFocus) |
Bu nedenle Shell komutu çağrılmadan önce 5 saniye geçer.
Kabuk İşlevinden Hata Döndürme
Çağırırken kodumuzda bir hata varsa Kabuk işlev ve hata döndürülecek ve kodumuz hata ayıklama moduna geçecektir.
Örneğin bu makroda not defterini yanlış yazmışız.
1 | Çağrı Shell("not defteri", vbNormalFocus) |
Bu makroyu çalıştırmanın sonucu şöyle olacaktır:
VBA Programlama | Code Generator sizin için çalışıyor!
Mevcut Bir Dosyayı Shell ile Açın
İle açmak istediğimiz belirli bir dosyamız varsa, Kabuk komutuyla kodumuza dosya adını ekleyebiliriz.
1 | Shell'i çağırın("Notepad.exe C:\demo\shell_test.txt", vbNormalFocus) |
Dosya adını yanlış yazarsak, dosya bulunamaz ve yeni bir dosya oluşturmak isteyip istemediğimizi soran bir mesaj kutusu görünür.
Kabuk işlevi tarafından kullanılan parametreler
NS Kabuk fonksiyonun 2 parametresi vardır - çağrılacak programın adı ve programın kullanacağı windows stili. biz kullanıyoruz vbNormalFocus yukarıdaki örneklerde, program (bu durumda Not Defteri) açıldığında, odak vardır ve PC'deki varsayılan konum ve boyutta açılır.
NS Kabuk beş seçenek daha sunar:
vbHide Pencereyi gizler ve odağı o pencereye ayarlar
vbMinimizedFocus Pencereyi odaklı bir simge olarak görüntüler
vbMaximizedFocus Programı, odakla büyütülmüş bir pencerede açar
vbNormalNoFocus Pencereyi en son konumuna ve boyutuna geri yükler
vbMinimizedNoFocus Pencereyi bir simge olarak görüntüler ve o anda etkin olan pencere etkin kalır
Kabuk Komutundan İşlem Kimliği Döndürme
çalıştırdığımızda Kabuk Komut, bir İşlem veya Görev Kimliği döndürür. İşlem Kimliğini bir değişkende saklayabilir ve bu İşlem Kimliğini başka bir komutu çalıştırırken kullanabiliriz - örneğin, Görev Öldür Not Defteri dosyasını kapatma komutu.
123456 | Alt TestPIDProcessID'yi tamsayı olarak karartprocessID = Shell("not defteri", vbNormalFocus)Shell'i çağırın("Taskkill /F /PID" + CStr(processID))MsgBox ("Not Defteri İşlem Kimliği = " + CStr(işlem Kimliği))Alt Bitiş |
İlk satırda NotePad açılır ve Process ID'ye Windows tarafından bir değer atanır. Bu değeri ProcessID değişkeninde saklıyoruz. Daha sonra, Notepad'i yeni açtığımız NotePad örneğini kapatmaya zorlamak için TaskKill'i kullanırız. NS /F güç değiştirme not defteri sona erdirmek ve /PID anahtar söyler Görev Öldür Not Defteri'ni aramak için İşlem Kimliği değer. CStr işlevi P'yi dönüştürürişlem kimliği Shell ve sonraki satırdaki MsgBox'ın her ikisinin de ihtiyaç duyduğu dize biçimine.
VBA Kodu Örnekleri Aramaktan Bıktınız mı? AutoMacro'yu deneyin!
VBA Programlama | Code Generator sizin için çalışıyor!
Shell ile Diğer Programları Çağırmak
Shell, başka herhangi bir Windows programını açacaktır. Örneğin, bu kod çağırır Excelve 'example_workbook.xlsx' Excel dosyasını açar:
1 | Shell'i çağırın("Excel ""C:\DEMO\example_workbook.xlsx""", vbNormalFocus) |
Bu, açılan dosyayı gösterir:
ShellExecute ve ShellExecuteEx, Shell Komutuna Karşı
Windows programlama alanı sunar KabukYürüt ve KabukYürütmeEx yazılım kodundan harici programları çağıran işlevler. VBA Shell işleviyle karşılaştırıldığında, bu Windows işlevleri daha fazla esneklik sunar, ancak VBA bunları desteklemez ve bu nedenle bu makale bunları kapsamaz.