V sestavku o programiranju v Excel-u bom opisal, kako napisati svoj lastni internetni brskalnik. Seveda se takoj vprašamo, zakaj se tega sploh lotiti, saj je na trgu množica odličnih brezplačnih brskalnikov. Prvi odgovor je zato ker lahko, drugi pa možnost prilagoditve brskalnika za lastne potrebe.
Ker vemo, da se pisanja brskalnikov lotevajo velike ekipe programerjev, ki se s tem ukvarjajo več let, se postavlja vprašanje, ali smo temu izzivu sploh dorasli? Na našo srečo in zahvaljujoč Microsoft-u je odgovor pritrdilen. Microsoft je dal vesoljnemu programerskemu svetu na razpolago svoj Internet Explorer v obliki ActiveX komponente. V resnici bomo samo oblekli Internet Explorer v svojo aplikacijo (seveda pa lahko sorodnikom in znancem, ki bodo spremljali naš dosežek z vzkliki občudovanja to zamolčimo 😉).
Priprava okolja
Programerji se, podobno kot pisatelji, ob začetku projekta srečujemo s prazno stranjo, ki nas srepo gleda v oči. Manj pogumni v tem primeru hitro pogledajo, če se v zadnjih dveh minutah slučajno dobili pomembno elektronsko pošto ali, če se je kje drugje na internetu zgodilo kaj življensko pomembnega. Ker pa spadamo med neustrašne, se s sovražnikom soočimo iz oči v oči. Med programerji je že od nekdaj znana metoda "deli in vladaj" (očitno je bil tudi Julij Cezar programer). Zastrašujoč problem programiranja spletnega brskalnika bom razdelili na manjše, lažje obvladljive korake.
Prva odločitev, ki smo jo sprejeli, je izbira MS Excel-a kot razvojnega orodja. V Excelu je sicer težje napisati brskalnik kot v nekaterih drugih okoljih, vendar je nadaljna obdelava podatkov precej lažja. Poleg tega je Excel pogosto že na razpolago na računalniku, za ostala orodja pa se moramo bolj potruditi. Izbrati moramo še format datoteke. Ta odločitev je pomembna, ker je Microsoft v verziji Office-a 2007 spremenil format datotek. Odločiti se moramo, ali bo naš brskalnik deloval v Excelu od verzije 2000 navzgor, ali le od verzije 2007. Če želimo brskalnik uporabljati od verzije 2000 do 2013 je edini sprejemljivi format datoteke xls. Ker v tem formatu ne moremo delati z zavihki (RibbonX), sem se sam odločil za verzijo od 2007 dalje.
Začnemo z odpiranjem praznega direktorija (mape), ki sem ga sam poimenoval "xls_IE". Odpremo Excel in na ta direktorij shranimo prazen delovni zvezek z imenom "brskalnik.xlsm". Sami lahko izberete tudi drugačno ime, nujno je le, da ga shranite kot excelov delovni zvezek z omogočenimi makri. Za delo z makri bomo v Excelu potrebovali zavihek "Razvijalec", zato ga (v primeru, da še ni) omogočimo, tako, da kliknemo na okrogli gumb (v Excelu 2007) oziroma na zavihek "Datoteke" (v Excelu 2010 in 2013)
Na spodnjem delu okna je gumb "Excelove možnosti", ki ga kliknemo:
Na oknu, ki se odpre odkljukajte možnost "V traku prikaži jeziček »Razvijalec«"
Predlagam tudi, da kar takoj naredite varnostno kopijo projekta, lahko na strežnik ali USB ključek, saj nesreča nikoli ne počiva (si predstavljate pod kakšnim stresom mora biti ta uboga Nesreča).
Oblikovanje uporabniškega vmesnika
Izberemo zavihek "Razvijalec" in na njem gumb "Visual Basic":
Odpre se nam okolje za pisanje VBA programov, t.i. VBIDE. Kreirali bomo okno, v katerem bo deloval naš brskalnik. V oknu "Project Explorer" klinemo z desnim gumbom miške in v meniju, ki se pojavi, izberemo "Insert >> UserForm":
Okno poimenujemo "FBrskalnik", kot naslov okna pa vnesemo "Spletni brskalnik":
Ker okna, ki so naravno dosegljiva v Excelu, ne omogočajo spreminjanja velikosti z miško, bomo dodali še dva gumbka, s katerima bo možno spremeniti velikost okna. Vse komponente, ki jim ne želimo spreminjati velikosti skupaj z oknom, bomo postavili na zgornji del obrazca, v spodnjem delu pa bo samo spletni brskalnik, ki bo spreminjal svojo velikost v skladu s premembo velikosti samega okna. Izgled končnega obrazca:
Predenj narišemo posamezne komponente na okno, potrebujemo internetni brskalnik. Če je Internet Explorer instaliran in registriran na našem računalniku, moramo samo še pripeljati komponento v Excel. Na okno s komponentami kliknemo z desnim gumbom miške in izberemo "Additional Controls":
Odpre se nam spodnje okno, v katerem izberemo komponento Microsoft Web Browser.
V oknu s kontrolami se nam pojavi ikona globusa, ki prestavlja naš brskalnik.
Da nekoliko skrajšam celotno zgodbo, ne bom razlagal posameznih korakov, temveč bom samo naštel vrste in lastnosti posameznih komponent. V sliki končnega obrazca sem oštevilčil posamezne komponente, kar bom sedaj uporabil pri pripravi seznama: 1 - okno brskalnika (UserForm) (Name) FBrskalnik Caption Spletni brskalnik Height 460 Width 645 2 - gumb za navigacijo na predhodno obiskano internetno stran (CommandButton) (Name) gumbNazaj Caption < Height 18 Left 6 Top 4 Width 18 3 - gumb za navigacijo za naslednjo internetno stran (na seznamu obiskanih) (CommandButton) (Name) gumbNaprej Caption > Height 18 Left 30 Top 4 Width 18 4 - polje za vnos internetnega naslova (TextBox) (Name) besURL Height 18 Left 54 Text www.google.si Top 4 Width 540 5 - gumb za navigacijo na stran, ki smo jo vnesli v polje za vnos naslova (CommandButton) (Name) gumbPojdi Caption Pojdi Height 18 Left 60 Top 4 Width 36 6 - statusna vrstica (TextBox) - običajno se nahaja na spodnjem robu okna, tokrat smo si poenostavili programiranje na škodo standardnega uporabniškega vmesnika. (Name) Status Height 18 Left 6 Text Top 24 Width 576 7 - gumb za zmanjšanje okna brskalnika (CommandButton) (Name) gumbZmanjsaj Caption - Height 18 Left 588 Top 24 Width 18 8 - gumb za povečanje okna brskalnika (CommandButton) (Name) gumbPovecaj Caption + Height 18 Left 612 Top 24 Width 18 9 - ActiveX kombonenta spletnega brskalnika (WebBrowser) (Name) wbBrskalnik Height 384 Left 6 Top 48 Width 630
Definicija akcij oz. dogodkov ob klikih gumbkov in spremembah v brskalniku
Za vsak gumbek je potrebno določiti podprogram, ki se sproži ob kliku nanj. Za začetek začnemo z uvozom definicij vmesnika za HTML dokument. To naredimo tako, da v meniju "Tools" izberemo postavko "References...", kar nam odpre okno za upravljanje z referencami. Na seznamu izberemo "MIcrosoft HTML Object Library" in odkljukamo:
Sedaj smo pripravljeni za spopad s kodo. Kliknemo na ikono "View Code":
In vnesemo spodnjo kodo v okno:
Option Explicit
Public wb As WebBrowser
Public WithEvents HTML As HTMLDocument
Private Sub gumbNaprej_Click()
' Premaknemo se na naslednjo stran v seznamu že obiskanih
wb.GoForward
End Sub
Private Sub gumbNazaj_Click()
' Vrnemo se na prejšnjo stran
wb.GoBack
End Sub
Private Sub gumbPovecaj_Click()
' Povecamo širino in višino okna 10 pikslov. Istocasno prilagodimo tudi
' velikost brskalnika. Ce je širina okna vecja od 1000 pikslov ignoriramo ukaz
If Me.Width < 1000 Then
Me.Width = Me.Width + 10
Me.Height = Me.Height + 10
Me.wbBrskalnik.Width = Me.wbBrskalnik.Width + 10
Me.wbBrskalnik.Height = Me.wbBrskalnik.Height + 10
End If
End Sub
Private Sub gumbZmanjsaj_Click()
' Zmanjšamo istocasno širino in višino okna ter brskalnika za 10 pikslov
' Ker ostale kontrole pustimo pri miru ne pustimo okna zmanjšati pod 645 pikslov.
If Me.Width > 645 Then
Me.Width = Me.Width - 10
Me.Height = Me.Height - 10
Me.wbBrskalnik.Width = Me.wbBrskalnik.Width - 10
Me.wbBrskalnik.Height = Me.wbBrskalnik.Height - 10
End If
End Sub
Private Sub UserForm_Initialize()
' Zacetne nastavitve programa: inicializiramo spremenljivko wb, kjer bo
' shranjena povezava na naš brskalnik. Brskalniku povemo, naj nam ne javlja
' napak v skriptih ter odpremo zacetno stran
Set wb = Me.wbBrskalnik
wb.Silent = True
wb.Navigate besURL.Value
End Sub
Private Sub gumbPojdi_Click()
' Odpremo stran, ki smo jo vnesli v vnosno poslje
wb.Navigate besURL.Value
End Sub
Private Sub wbBrskalnik_DocumentComplete(ByVal pDisp As Object, URL As Variant)
' Ko je prikaz dokumenta v oknu zakljucen, ga prepišemo v spremenljivko
' HTML za nadaljno obdelavo
Set HTML = wb.Document
End Sub
Private Sub wbBrskalnik_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
' Ce smo kliknili na povezavo, po premiku na novo stran naslov te strani
' zapišemo v vnosno polje
besURL.Value = URL
End Sub
Private Sub wbBrskalnik_StatusTextChange(ByVal Text As String)
' Sporocila, ki nam jih posreduje brskalnik, zapišemo v statusno polje
Status.Value = Text
End Sub
S tem smo dobili solidno osnovo za naš brskalnik, ki ga lahko uporabimo za zajeme podatkov z interneta.