Tisti, ki so se uspeli spoznati s programskim jezikom Visual Basic presenečeno ugotovijo, da uporabniško ustvarjena okna v Excelu (in drugih programih pisarniške zbirke) nimajo izpostavljene ročice (window handle). V tem prispevku bom opisal, kako si lahko sami pomagamo in jo ugotovimo programsko.
Najprej, če še nismo, ustvarimo nov modul s programsko kodo in ga poimenujemo Win32 API. Semkaj bomo vpisovali deklaracije funkcij, ki nam jih ponuja operacijski sistem MS Windows na uporabo. Sedaj vanj vpišemo deklaracijo za funkcijo FindWindow:
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
S tem smo naredili vse potrebno, kar se tiče sistemskih funkcij. Sedaj v programskem modulu našega okna (obrazca) dodamo nekaj vrstic programske kode:
Public Property Get hWnd() As Long Dim aClsName As String Static rc As Long If rc = 0 Then If Val(Application.Version) < 9 Then aClsName = "ThunderXFrame" Else aClsName = "ThunderDFrame" End If rc = FindWindow(aClsName, Me.Caption) End If hWnd = rc End Propert
Na ta način smo ustvarili lastnost našega obrazca hWnd (poimenovanje je izposojeno iz poimenovanja pri ostalih objektih), ki jo lahko prebiramo od vsepovsod, saj smo jo tudi javno izpostavili. Hkrati smo poskrbeli tudi za optimizacijo, saj dejansko sistem zgolj enkrat zaprosimo, naj nam pove ročico našega okna, prebrano vrednost pa shranimo v statično spremenjljivko, saj vemo, da se ročica v času trajanja seje ne bo spreminjala.
Za konec še nekaj o uporabnosti. Včasih se lotimo dolgotrajnejših operacij, npr. branja nekaj desetin, stotin ali celo tisočev vrstic v seznam in nadvse nadležno bi bilo, da bi se vsakič znova izrisovalo okno, ko dodamo posamezen element seznama.
Tak primer so npr. drevesni šifranti, kot sta šifrant klasifikacij dejavnosti ali kontni plan. Zato je dobro med izrisovanjem okno “zamrzniti”, torej preprečiti ponovno izrisovanje okna v času dodajanja posameznih elementov v drevesni seznam.
Na ta način ne samo da preprečimo nadležno utripanje na zaslonu, pač pa tudi znatno pospešimo izvajanje naših algoritmov, kar uporabnikom zagotovo naredi delo z našimi orodji prijetnejše.
Tags: Avtomatizacija pisarniškega poslovanja, MS Excel, MS Office, VBA