Kako riješiti problem kada Workbook_Open
događaj u VBA makronaredbi neradi kako treba tj. ne
funkcionira
Ako čitate ovaj tutorijal, tada vjerojatno
imate neko znanje rada sa VBA makronaredbama u Excelu. Uz to
sigurno vam ne funkcionira Workbook_Open događaj kada
otvorite datoteku vaše excel aplikacije. Dakle postavili ste
Workbook_Open VBA kod u ThisWorkbook ali ne funkcionira kada
pokrenete datoteku.
U koliko imate problema sa pokretanjem
vaše Workbook koja u modulu ThisWorkbook sadrži događaj ili
VBA makronaredbu Workbook_Open() pogledajte nekoliko načina
na koji možete riješiti problem.
Security Macro
Settings u Excelu 2007
Kao prvo potrebno je da provjerite je li
vam u Excelu uključena opcija koja
dozvoljava izvršavanje
makronaredbi. Pogledajte sliku ispod za Excel
2007 a za Excel
2003 pogledajte link.
Ovdje vas želim upozoiriti, vaša stvar je kako ćete
postaviti sigurnosni nivo u ovim postavkama. Ja sam na slici
postavio minimalne zahtjeve. Dakle dozvolio sam pokretanje
za sve VBA makronaredbe tj. Excel datoteke koje sadrže VBA
kod. Ovo je veliki sigurnosni rizik ako pokrećete Excel
datoteku koja sadrži VBA iz nepoznatih izvora, lokacija ili
autora. To je vaš rizik od eventualnog pokretanja VBA koda
koji može sadržavati neki virus ili sam biti virus. MOžda da
isprobate neku od jačih restrikcija, barem sa nekim
upozorenjem.
Trusted
Locations u Excelu 2007
Trusted Locations ili lokacija kojoj
vjerujemo postavlja se u Excelu 2007 kao na slici ispod.
Dakle u Trust Center dodajte pomoću gumba ADD lokaciju u
kojoj smještate vaše excel datoteke koje sadrže VBA
makronaredbe. Ovo ne morate radiit ali ako često pišete VBA
makronaredbe i isprobavate svoje znanje ili učite, dobro je
imati ovu lokaciju.
Postavio sam visoku razinu sigurnosti ali VBA macro i dalje
funkcionira?
VAŽNO!
Ako postavite svoju vlastitu Trusted Locations sve
datoteke koji se nalaze unutar foldera (u ovom slučaju je to
C: \Users\korisnik\Downloads) i sadrže VBA makronaredbe
radit će bez problema tj. bez obzira postavite li Macro
Security Settings na High ili Very-High ili u ovom slučaju
opciju "Disable all macros without notification".
Uočite ovaj dio upozorenja na dijalog
prozoru iznad "For macros in documents not in a trusted
locations". Stoga pazite dobro koje datoteke pozicionirate u
dotičnu lokaciju. Tu se uglavnom stavljaju datoteke na
kojima osobno vi radite, ali nemojte baš stavljati datoteke
koje skinete sa interneta a ne znate je li provjeren izvor
(pazite kome vjerujete). Tipka SHIFT prilikom otvaranja
ignorirat će VBA macro i na ovoj lokaciji.
Dakle ako postavite Macro Security na HIGH
on će funkcionirati samo za one datoteke koje nisu na našoj
lokaciji kojoj vjerujemo.
MS Office
Diagnostic može pomoći u rješavanu problema sa Workbook_Open
event
Za svaki slučaj provjerite alatom MS
Office Diagnostic je li sve u redu sa Excel 2007 (meni je
ovo pomoglo na neki način)
Workbook_Open event ne funkcionira u Excelu
2007 prilikom rada sa *.XLS formatom datoteke
Ovakav slučaj sam imao ja. Dakle koristim
Excel 2007 i ako pokrenem neku datoteku koja je kreirana za
Excel 2003 (XLS fomat) a ista sadrži Workbook_Open događaj,
isti se nije aktivirao prilikom pokretanja. Uzmimo za
primjer datoteku iz ovog primjera koju možete skinuti na
svoje računalo
ovdje.
Kreirao sam novu Workbook u kojoj sam se
pozicionirao na Sheet3 koji je kao startni. Snimio sam
Workbook u datoteku pod nazivom Sheet1_Activate.xls
U modul ThisWorkbook postavio sam jednostavnu VBA
makronaredbu koja ima slijedeći VBA kod
Private Sub Workbook_Open()
Sheets("Sheet1").Activate
End Sub
Dakle ova makronaredba treba prilikom
otvaranja Workbook preusmjeritit pozicioniranje na Sheet1 sa
startnog Sheet3 koji sma postavio prilikom snimanja radne
knjige. Međutim, VBA makronaredba nije odradila svoje pa sam
ostao na pozicioniran Sheet3? Zašto ne znam ni sam. Kada ovo
isto napravim i snimim u *.XLSM formatu za Excel 2007 sve
funkcionira kako treba.
Isprobao sam jedan test da vidim je li uopće
pokrenut VBA Macro sa događajem Workbook_Open. Za tu svrhu
dodao sam privremeno u Module1, VBA macro koji aktivira
sve događaje u Workbook tj. testira otvorenu Workbook i
pokazuje jesu li se sve makronaredbe pokrenule nakon
otvaranja Workbook.
VBA macro kod za testiranje ima slijedeći sadržaj i naredbe
Sub EnableEventsNow()
Dim sMsg As String
With Application
sMsg = IIf(.EnableEvents, _
"Events were already enabled.", _
"Events are now enabled.")
.EnableEvents = True
End With
MsgBox sMsg
End Sub
Nakon snimanja Workbook sa umetnutom VBA
makronaredbom iznad postavio sam kursor miša unutar linije
dotične VBA makronaredbe (nebitno gdje, npr: iza riječi "String"
i pritisnuo tipku F5. Pojavio se ovakav prozor kao na slici
ispod. Znači da su se sve VBA makronaredbe pokrenule
ispravno, ali moj file ne funkcionira? :(
Rješenje ovog problema kada je datoteka u *.XLS
formatu našao sam u dodatnoj VBA makronaredbi koju sam
postavio u standardni Module1 a koja sadrži slijedeći VBA
kod
Public Sub Auto_Open()
Application.Run "ThisWorkbook.Workbook_Open"
End Sub
Što radi ovaj događaj Auto_Open? Prilikom
pokretanja datoteke on poziva događaj Workbook_Open u modulu
ThisWorkbook. Tako sam uspio koristiti *.XLS file u Excelu
2007 (koji ima vjerojatno neki problem iako imam SP3). Dakle
ovaj VBA macro umetnite u standardni Module
|