Genel Bakış
WebBrowser (Microsoft Web Browser), bir UserForm üzerine yerleştirilen ve Windows'un Internet Explorer (Trident) bileşenini kullanarak web sayfalarını form içinde gösteren ActiveX denetimidir. Adres açma, ileri-geri gitme, yenileme ve sayfa yüklenince tepki verme gibi işleri VBA kodundan yönetmenizi sağlar. Modern web siteleri için sınırlı olduğundan, kullanmadan önce sınırlarını bilmeniz gerekir.
Protokolü olmayan adreslerin başına güvenli protokol öneki eklenir; zaten önekle başlayan adresler olduğu gibi kalır. Tam adresleri Mini Sayfa içindeki C sütununda görebilirsiniz. Bu sütundaki değerleri doğrudan WebBrowser1.Navigate yöntemine verebilirsiniz.
Her ürün için sorgu adresi oluşur; örneğin B2 hücresi değerini alır. Boşluk ve Türkçe karakterler adreste kodlanmış olarak yer alır. Bu adresi WebBrowser1.Navigate yöntemine vererek arama sonucunu form içinde açabilirsiniz.
Form açıldığında UserForm_Initialize yordamı B2 hücresindeki adresi Navigate ile yükler. Sayfa yüklemesi bittiğinde DocumentComplete olayı çalışır ve form başlığı sayfanın adıyla değişir. Düğmeler geri, ileri ve yenileme işlemlerini yapar; GoBack ve GoForward için geçmişte sayfa yoksa oluşan hata On Error Resume Next ile atlanır.
Denetimi forma ekleme
WebBrowser denetimi, Araç Kutusu'nda varsayılan olarak bulunmaz; elle eklemeniz gerekir:- Düzenleyiciyi açın: Alt+F11 tuşlarıyla Visual Basic Düzenleyicisi'ni açın ve Ekle > Kullanıcı Formu (Insert > UserForm) komutuyla bir form ekleyin.
- Denetimi seçin: Araç Kutusu'ndaki boş bir alana sağ tıklayın, Ek Denetimler (Additional Controls) komutunu seçin ve listeden Microsoft Web Browser kutusunu işaretleyin.
- Forma çizin: Araç Kutusu'nda beliren simgeyi seçip form üzerinde bir alan çizin. Denetimin varsayılan adı WebBrowser1 olur.
Önemli özellikler
- LocationURL: Denetimde o anda açık olan sayfanın adresini döndürür.
- LocationName: Açık sayfanın başlığını ya da adını döndürür.
- Busy: Denetim bir sayfayı yüklüyorsa True döndürür.
- ReadyState: Yükleme durumunu verir; sayfa tamamen yüklendiğinde 4 değerini (READYSTATE_COMPLETE) alır.
- Document: Yüklenen sayfanın belge nesnesine erişim sağlar; sayfa içeriğini okumak için kullanılır.
- Silent: True yapıldığında betik hatası ve uyarı iletilerinin gösterilmesini engeller.
- Left, Top, Width, Height: Denetimin form üzerindeki konumunu ve boyutunu belirler.
Önemli yöntemler ve olaylar
Sayfa açmak için Navigate yöntemi kullanılır. Yöntem eşzamansızdır; çağrıldığında sayfanın yüklenmesini beklemeden kodun sonraki satırına geçilir.WebBrowser1.Navigate URL, [Flags], [TargetFrameName], [PostData], [Headers]
- URL: Açılacak adres; zorunludur. Adres, protokol öneki dahil tam olarak yazılmalıdır.
- Flags: Gezinme davranışını belirleyen seçenekler; isteğe bağlıdır.
- TargetFrameName: Hedef çerçevenin adı; isteğe bağlıdır.
- PostData: POST ile gönderilecek veri; isteğe bağlıdır.
- Headers: Gönderilecek ek HTTP üst bilgileri; isteğe bağlıdır.
- GoBack, GoForward: Gezinti geçmişinde geri ve ileri gider; geçmişte sayfa yoksa hata oluşur.
- GoHome: Giriş sayfasını açar.
- Refresh: Açık sayfayı yeniler.
- Stop: Süren yüklemeyi durdurur.
- DocumentComplete: Sayfa yüklemesi bittiğinde oluşur; yüklenen sayfayla ilgili işlem için en uygun olaydır.
- BeforeNavigate2: Gezinme başlamadan önce oluşur; Cancel parametresini True yaparak gezintiyi iptal edebilirsiniz.
- NavigateComplete2: Gezinme başarıyla başladıktan sonra oluşur; belge henüz tam yüklenmemiş olabilir.
- TitleChange: Sayfa başlığı değiştiğinde oluşur.
- StatusTextChange: Durum çubuğu metni değiştiğinde oluşur.
1. Adreslere protokol öneki ekleme
WebBrowser1.Navigate yalnızca protokolü yazılmış adreslerle sorunsuz çalışır. Bu makro, B sütunundaki adreslerin başında http yoksa güvenli protokol önekini ekleyerek C sütununa tam adresi yazar. Kodu standart bir modüle yapıştırın.
VBA
20 satır
Option Explicit
' Adresin başında http yoksa https:// ekler ve sonucu C sütununa yazar
Sub TamAdresOlustur()
Dim ws As Worksheet
Dim i As Long
Dim sonSatir As Long
Dim adres As String
Set ws = ThisWorkbook.Worksheets("Adres Listesi")
sonSatir = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To sonSatir
adres = Trim(CStr(ws.Cells(i, "B").Value))
If LCase(Left(adres, 4)) <> "http" Then
adres = "https://" & adres
End If
ws.Cells(i, "C").Value = adres
Next i
End Sub
WebBrowser
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ürün | Adres | Tam Adres |
| 2 | Kahve Makinesi | www.example.com/kahve | https://www.example.com/kahve |
| 3 | Çay Bardağı | https://www.example.com/cay | https://www.example.com/cay |
| 4 | Termos | example.com/termos | https://example.com/termos |
| 5 | Cezve | www.example.com/cezve | https://www.example.com/cezve |
| 6 | Süzgeç | http://www.example.com/suzgec | http://www.example.com/suzgec |
Adres ListesiExcelDepo v1.0.0
2. Arama adreslerini kodlayarak oluşturma
Türkçe karakter ve boşluk içeren arama sözcüklerini adrese eklerken kodlamak gerekir. Makro, A sütunundaki ürün adlarını WorksheetFunction.EncodeURL ile kodlayıp B sütununa tam arama adresini yazar. EncodeURL, Excel 2013 ve sonrasında Windows'ta kullanılabilir. Kodu standart bir modüle yapıştırın.
VBA
17 satır
Option Explicit
' Ürün adını URL için kodlayıp arama adresini B sütununa yazar
Sub AramaAdresiOlustur()
Dim ws As Worksheet
Dim i As Long
Dim sonSatir As Long
Dim kodlu As String
Set ws = ThisWorkbook.Worksheets("Arama Adresleri")
sonSatir = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To sonSatir
kodlu = Application.WorksheetFunction.EncodeURL(CStr(ws.Cells(i, "A").Value))
ws.Cells(i, "B").Value = "https://www.example.com/ara?q=" & kodlu
Next i
End Sub
WebBrowser
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Aranan Ürün | Sorgu Adresi |
| 2 | Çay Bardağı | https://www.example.com/ara?q=%C3%87ay%20Barda%C4%9F%C4%B1 |
| 3 | Şeker Kutusu | https://www.example.com/ara?q=%C5%9Eeker%20Kutusu |
| 4 | Ütü Masası | https://www.example.com/ara?q=%C3%9Ct%C3%BC%20Masas%C4%B1 |
| 5 | Işıklı Lamba | https://www.example.com/ara?q=I%C5%9F%C4%B1kl%C4%B1%20Lamba |
| 6 | Öğütücü | https://www.example.com/ara?q=%C3%96%C4%9F%C3%BCt%C3%BCc%C3%BC |
Arama AdresleriExcelDepo v1.0.0
3. UserForm içinde sayfa açma ve başlığı gösterme
Bu örnek UserForm1 adlı bir formun kod modülüne yazılır; Araç Kutusu'ndan eklediğiniz WebBrowser1 denetimi form üzerinde bulunmalıdır. Form açılırken sayfadaki B2 hücresinde yazan adres yüklenir, yükleme bitince form başlığı sayfa başlığıyla güncellenir. Formu kodla açmak için Sub içinde UserForm1.Show satırını kullanabilirsiniz. Örnek, kullanıcı formu açtığı için çalıştırılmaz.
VBA
32 satır
' UserForm1 kod modülüne yazın (WebBrowser1 ve CommandButton1-3 denetimleri formda olmalı)
Private Sub UserForm_Initialize()
Dim adres As String
adres = CStr(ThisWorkbook.Worksheets("Form Adresleri").Range("B2").Value)
WebBrowser1.Silent = True
WebBrowser1.Navigate adres
End Sub
' Sayfa tamamen yüklenince form başlığını günceller
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Me.Caption = WebBrowser1.LocationName
End Sub
' Geri düğmesi
Private Sub CommandButton1_Click()
On Error Resume Next
WebBrowser1.GoBack
On Error GoTo 0
End Sub
' İleri düğmesi
Private Sub CommandButton2_Click()
On Error Resume Next
WebBrowser1.GoForward
On Error GoTo 0
End Sub
' Yenile düğmesi
Private Sub CommandButton3_Click()
WebBrowser1.Refresh
End Sub
WebBrowser
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Başlık | Adres |
| 2 | Ana Sayfa | https://www.example.com |
| 3 | Ürün Kataloğu | https://www.example.com/katalog |
| 4 | İletişim | https://www.example.com/iletisim |
Form AdresleriExcelDepo v1.0.0
Kullanırken dikkat edin
- Internet Explorer bağımlılığı: Denetim Internet Explorer'ın eski Trident motorunu kullanır. Internet Explorer 2022'de kullanımdan kaldırıldığı için birçok modern site (güncel JavaScript, güvenlik protokolleri) bu denetimde düzgün görüntülenmeyebilir ya da betik hataları verebilir. Kritik işlerde buna güvenmeyin.
- Eşzamansız yükleme: Navigate çağrısı sayfanın yüklenmesini beklemez. Sayfa içeriğine (Document) erişmeden önce DocumentComplete olayını kullanın ya da Busy ve ReadyState değerlerini kontrol edin. Bekleme için sonsuz döngü kurmayın; olay tabanlı yaklaşım daha güvenlidir.
- Adres biçimi: Adresi protokol önekiyle birlikte tam olarak yazmayı unutmayın. Türkçe karakter ve boşluk içeren sorgu parametrelerini EncodeURL ile kodlayın.
- Ortam ve sürüm farkları: Denetim Mac için Excel'de bulunmaz. Bazı Office kurulumlarında, özellikle 64 bit sürümlerde, Ek Denetimler listesinde görünmeyebilir ya da başka bilgisayarda açıldığında çalışmayabilir; dosyayı paylaşmadan önce hedef bilgisayarda deneyin.
- Güvenlik: Denetim ActiveX tabanlı olduğundan kurumsal güvenlik ilkeleri kullanımını kısıtlayabilir. Bilmediğiniz sitelerin sayfalarını form içinde açmaktan kaçının ve Silent özelliğini hata iletilerini gizlemek amacıyla bilinçli kullanın.
- İlgili konular: UserForm, Araç Kutusu ve Ek Denetimler, UserForm_Initialize olayı, Hyperlinks.Add yöntemi, FollowHyperlink yöntemi, WorksheetFunction.EncodeURL, KÖPRÜ işlevi.