VBA Kullanarak Internet Explorer'ı (IE) Otomatikleştirin

Bu sayfa, VBA kullanarak Internet Explorer'ı (IE) otomatikleştirmek için kodlama örnekleri içerir.

** 6/7/2019 Güncellemesi: Şu anda VBA ile web otomasyonunu sağlamanın en iyi yolu Selenium kullanmaktır. Bu makale Selenyum'u KAPSAMAZ. Aşağıdaki örnekler işinize yarayacaktır ve ihtiyaçlarınız için yeterli olabilir. Ancak, daha gelişmiş ihtiyaçlarınız varsa veya web otomasyonu konusunda uzman olmak istiyorsanız, bunun yerine Selenium'u kullanmanızı şiddetle tavsiye ederim. Dan Strong'un Web Otomasyonu üzerine kursu (indirim bu bağlantıda mevcuttur) Selenium'u öğrenmek için harika bir kaynaktır:

(Dan'in kursundan bir Bağlı Kuruluş Komisyonu alıyorum)

VBA ile bir Web sayfasına gidin

İlk kod parçası IE'yi açar ve bir web sitesine gider. İkinci kod parçası IE'yi açar, bir web sitesine gider ve bir giriş kutusuyla etkileşime girer.

12345678910111213141516171819202122232425262728293031323334353637 Alt Automate_IE_Load_Page()'Bu, IE'de bir web sayfası yükleyecektirDim kadar uzunURL'yi Dize Olarak KarartNesne Olarak IE'yi KarartDim objElement As ObjectDim objCollection As Object'InternetExplorer Nesnesi OluşturunSet IE = CreateObject("InternetExplorer.Application")IE'yi görünür kılmak için IE.Visible = True olarak ayarlayın veya IE'nin arka planda çalışması için False olarak ayarlayın.IE.Visible = Doğru'URL'yi tanımlaURL = "https://www.automateexcel.com/excel/"'URL'ye gitIE.URL'de Gezinme' Durum çubuğu, kullanıcının web sitesinin yüklendiğini bilmesini sağlarApplication.StatusBar = URL & " yükleniyor. Lütfen bekleyin… "' IE yüklenirken bekleyin… 'IE ReadyState = 4, web sayfasının yüklendiğini belirtir (ilk döngü, yanlışlıkla ikinci döngüyü atlamamak için ayarlanmıştır)IE.ReadyState = 4'te Yap: DoEvents: Döngü 'Do whileIE.ReadyState = 4'e Kadar Yapın: DoEvents: Döngü 'Yapılana Kadar'Web Sayfası YüklendiApplication.StatusBar = URL & "Yüklendi"'IE'yi kaldırIE'yi Ayarla = Hiçbir ŞeyobjElement = Hiçbir şey ayarlaobjCollection'ı ayarla = Hiçbir şeyAlt Bitiş

İnsanların VBA'da IE ile çalışırken karşılaştığı çok yaygın bir sorun, VBA'nın Internet Explorer tam olarak yüklenmeden kod çalıştırmaya çalışmasıdır. Bu kodu kullanarak VBA'ya IE hazır olana kadar bir döngüyü tekrarlamasını söylersiniz (IE.ReadyState - 4).

1234 ' IE yüklenirken bekleyin… 'IE ReadyState = 4, web sayfasının yüklendiğini belirtir (ilk döngü, yanlışlıkla ikinci döngüyü atlamamak için ayarlanmıştır)IE.ReadyState = 4'te Yap: DoEvents: Döngü 'Do whileIE.ReadyState = 4'e Kadar Yapın: DoEvents: Döngü 'Yapılana Kadar

Ayrıca, bu kod satırını not edin:

1 IE.Görünür = DOĞRU

Bu kod, IE'nin arka planda mı yoksa ön planda mı çalışacağını değiştirir.

URL'yi Açın ve VBA Kullanarak Forma Veri Girin

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Bu, modülünüzün en üstünde olmalı. IE'yi aktif pencere olarak ayarlamak için kullanılır.Public Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As LongAlt Automate_IE_Enter_Data()'Bu, IE'de bir web sayfası yükleyecektirDim kadar uzunURL'yi Dize Olarak KarartNesne Olarak IE'yi KarartDim objElement As ObjectDim objCollection As ObjectHWNDSrc Kadar Karartın'InternetExplorer Nesnesi OluşturunSet IE = CreateObject("InternetExplorer.Application")IE'yi görünür kılmak için IE.Visible = True olarak ayarlayın veya IE'nin arka planda çalışması için False olarak ayarlayın.IE.Visible = Doğru'URL'yi tanımlayınURL = "https://www.automateexcel.com/vba"'URL'ye gitIE.URL'de Gezinme' Durum çubuğu, kullanıcının web sitesinin yüklendiğini bilmesini sağlarApplication.StatusBar = URL & " yükleniyor. Lütfen bekleyin… "' IE yüklenirken bekleyin… 'IE ReadyState = 4, web sayfasının yüklendiğini belirtir (ilk döngü, yanlışlıkla ikinci döngüyü atlamamak için ayarlanmıştır)IE.ReadyState = 4 iken Yap: DoEvents: DöngüIE.ReadyState = 4'e Kadar Yapın: DoEvents: Döngü'Web Sayfası YüklendiApplication.StatusBar = URL & "Yüklendi"'IE için Pencere Kimliği alın, böylece etkinleştirme penceresi olarak ayarlayabilirizHWNDSrc = IE.HWND'IE'yi Etkin Pencere Olarak AyarlaÖn PlanPenceresini Ayarla HWNDSrc'Giriş Kutusunu Bul ve Doldurn = 0IE.document.all'daki her öğe içinitm = "[object HTMLInputElement]" isen = n + 1n = 3 iseitm.Value = "çalışma sayfası"itm.Focus 'Giriş kutusunu etkinleştirir (imlecin görünmesini sağlar)Application.SendKeys "{w}", True 'W' tuş vuruşunu simüle eder. True, VBA'ya beklemesini söylerdevam etmeden önce tuş vuruşu bitene kadar'tabloyu çalıştırmak ve filtrelemek için sayfada javascriptSon makroya gitBitirBitirSonraki'IE'yi kaldırson makro:IE'yi Ayarla = Hiçbir ŞeyobjElement = Hiçbir şey ayarlaobjCollection'ı ayarla = Hiçbir şeyAlt Bitiş

VBA kullanarak IE'de GetElement

Internet Explorer'da nesnelerle etkileşim kurmak çoğu zaman acı verici olabilir. Hangi nesneyle çalışacağınızı belirlemeniz gerekir. Yukarıdaki kodda, “[object HTMLInputElement]” (bir giriş formu) 3. örneğini arıyoruz. Ardından giriş formuna (itm.value = “orksheet”) “orksheet” gireriz, imleci giriş formuna (itm.focus) hareket ettiririz ve “w” yazarız. Tabloyu filtrelemek için kullanılan javascript'i etkinleştirmek için bu durumda "w" yazmak gereklidir.

Nesneleri seçmenin daha doğrudan yöntemleri vardır, ancak her şey başarısız olursa bu yöntem işe yarayacaktır.

Bu diğer yöntemleri kullanmak için aşağıdaki seçenekleri kullanmak isteyeceksiniz:

1234 IE.document.getelementbyid("ID").value = "değer" 'Kimliğe göre bulIE.document.getelementsbytagname("ID").value = "değer" 'Etiketle bulIE.document.getelementsbyclassname("ID").value = "değer" 'Sınıfa göre bulIE.document.getelementsbyname("ID").value = "değer" 'Ada göre bul

Aynı ada sahip birden fazla öğe varsa bu yöntemleri kullanırken sorunlarla karşılaşabilirsiniz. Bir döngü kullanarak (yukarıdaki örnek kodda olduğu gibi), öğenin hangi örneğinin kullanılacağını belirtebilirsiniz.

VBA kullanarak IE ile etkileşim kurun

Yukarıdaki kodda olayı kullanıyoruz: Odak (itm.focus) imleci formda etkinleştirmek için.

Burada Nesne / Öğe Olayları, Yöntemleri ve Özellikleri ile ilgili daha fazla örnek bulabilirsiniz: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Bunların hepsi her nesne/eleman ile çalışmayacaktır ve IE'deki nesnelerle etkileşime girerken oldukça fazla deneme yanılma olabilir.

Anahtarları Internet Explorer'a Gönder

Yukarıdaki kodda Sendkeys komutunu kullandık:

1 Application.SendKeys "{w}", Doğru

Gönderme anahtarları genellikle son çare olmalıdır. Genellikle nesnelerle doğrudan etkileşim kurabilmeniz gerekir, ancak bazen Sendkeys komutunu kullanmak daha kolaydır. Sendkeys, temelde klavyeyle yazmakla aynıdır. Devam etmeden önce doğru pencerelerin ve nesnelerin seçildiğinden emin olmanız gerekir. Sendkey'ler, web'deki kullanıcı etkileşimine dayalı olarak çalışan olayları da tetikleyebilir. Yukarıdaki örnekte, web sayfasında kullandığımız Tablodaki Javascript filtresini etkinleştirmek için Sendkeys kullanıyoruz.

Sendkeys'in iki girişi vardır:
1. giriş tuşu (genellikle {}… {enter}, {q}… ile çevrilidir.)
2. DOĞRU/YANLIŞ'a geçmeden önce Gönderme Tuşlarının tamamlanmasını bekleyin. Internet Explorer ile çalışırken genellikle bunun DOĞRU olarak ayarlanmasını isteyeceksiniz.

Internet Explorer'ı Arka Planda Çalıştırın

Internet Explorer'ı arka planda çalıştırmak için iki şey yapmanız gerekir:

1. IE kodunu içeren makroyu Application.Run ile çağırın, böylece siz çalışmaya devam ederken makro arka planda çalışır:

1 Application.Run ("Automate_IE_Load_Page")

Not: Bu kod, çalışmanızı kesintiye uğratabilir veya çalışmanız kodu etkileyebilir. Örneğin, SendKeys kullanıyorsanız, Sendkeys yanlış uygulamaya bir tuş vuruşu gönderebilir. Bu konuda çok dikkatli olun.
2. IE'yi gizle:

1 IE.Visible = Yanlış

Selenyum ve VBA

Bu makaleyi faydalı bulduysanız, Dan Strong'un Web Otomasyonu kursuna göz atmak isteyebilirsiniz. Selenium'un VBA ile nasıl kullanılacağını kapsar.

(Dan'in kursundan bir Bağlı Kuruluş Komisyonu alıyorum)

Dan'in öğrencilerinden birinin referansı

https://excelvbaisfun.com/wp-content/uploads/2019/06/dan_strong_complete_web_automation_course_review_VbFn2vwul8A_1080p.mp4

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave