Outlook 2010 in priponke

Z vprašanjem uporabnika na forumu, sem se spomnil na problem priponk v Outlooku. Odkar imamo računalnike v vsaki pisarni se spominjam problemov uporabnikov (no čisto iskreno in popolnoma nič šovinistično – bolj uporabnic), ki ne najdejo dokumentov.

Večina se jih je vedno spominjala, da so dokument urejali sedaj pa ga nikjer ne najdejo. In kar je najhujše – dokument se tudi ne nahaja med nedavno odprtimi dokumenti v Word-u. Priznam, največkrat jim preprosto nisem verjel in sem mislil, da so se pač zmotili v imenu datoteke ali so vsebino posneli v neko drugo, že obstoječo datoteko ali pa celo kaj čisto tretjega.

Potem pa se je v večini primerov izkazalo, da so dokument zares oblikovali in shranili, a shranili so ga v neko mapo, za katero še nikoli niso slišali in ki se nahaja nekje na disku v podmapah, za katere niso še nikoli slišali…

Resnica pa je bila preprosto ta, da so dokument odprli v Outlooku in slednji ga vedno najprej shrani na disk. Ker pa ga na more kar nekam shraniti, ga shrani v začasno mapo in ta začasna mapa se nahaja nekje na sistemskem disku Oken…

In to se je dogajalo po celotnem podjetju iz dneva v dan. Vsem uporabnikom sem zmeraj govoril: »Vsako priponko najprej shranite v mapo ‘Moji dokumenti’ in jo potem obdelujte.«. Seveda me niso poslušali, kaj bi me uporabniki ko me niti moja lepša polovica ni – tudi njej sem vsake toliko in toliko časa iskal datoteke po diskih :)…

In ker v naših krajih očitno le nismo toliko za leseno žlico, temveč se to dogaja po našem celotnem (modrem) planetu, so se pri MS odločili, ter z Outlook 2010 začeli priponke shranjevati v ‘read-only’ načinu. To pomeni, da Outlook vsako datoteko, ki jo shrani v začasno mapo označi, da je samo za branje. Ko uporabnik takšno datoteko odpre, jo sicer lahko popravlja, a na isto mesto je ne more več shraniti – saj se tam že nahaja ta datoteka, ki pa je ni dovoljeno spreminjati.

In sedaj imajo vsi uporabniki, ki nas ne poslušajo (računalničarje namreč) nov problem, saj datoteke, ki jo v Outlooku neposredno odprejo, ne morejo shraniti na isto mesto in zato so prisiljeni, da jo shranijo nekam drugam – upajmo, da v mapo ‘Moji dokumenti’.

In zakaj ravno upam, da jo bodo shranili v mapo ‘Moji dokumenti’ ? Preprosto zato, ker vsako kolikor toliko »sposobno« podjetje izdeluje varne kopije podatkov in seveda nikoli ne kopira celotnega diska, temveč vedno mape ‘Moji dokumenti’ ter seveda še nekaj drugih map in podmap.

Za zaključek…

Seveda tudi to ni rešitev za naše nadebudne uporabnike, saj ima moja lepša polovica sedaj pač polno namizje dokumentov, ki jih je nekoč urejala – pač vsak dokument iz Outlooka (ali gmail-a) shrani kar na namizje – tako kot tudi mnogo drugih uporabnikov, ki jih poznam…

Ob tem pa se mi poraja zanimiva misel.

V večini primerov za red in čistočo doma še vedno skrbijo ženske in mize morajo biti vedno urejene. Tudi moja delovna miza mora biti lepa in urejena – pa čeravno bi jaz imel tam 3 računalnike in 200 kablov, pa kamero in fotoaparat, pa 10 knjig in 200 listov… Ne gre – mi ne pusti!

Po drugi strani pa imam na vseh diskih vse dokumente, programe in vso ostalo šaro prav lepo in smiselno urejene, namizje vseh računalnikov pa brez ene same ikone (no, tisti koš mi ponavadi sveti v kakšnem kotu zaslona). Kaj pa moja ženička? No ja; tam pa je vse, kar je lahko, na namizju in popolnoma neurejeno…

Očitno smo moški tako zelo leni, da se nam realnih stvari ne ljubi premikati, virtualne pa je preprosto premikati in jih pač premaknemo – očitno si le želimo urejenega sveta, a smo preveč leni…

PS: Če sem koga z zaključkom,  užalil se mu iskreno opravičujem, to ni bil namen zaključka. Posploševanje ni nikoli pravično do vseh, a roko na srce, zapisano bolj ali manj kar velja 🙂

PDF dokumenti v Office 2003

S prihodom MS Pisarne 2007 se je MS odločil tudi za neposredno podporo PDF dokumentov. To pomeni, da lahko v Wordu (Excelu…) izdelate PDF dokument preprosto tako, da izberete opcijo Shrani kot PDF preprosto izdelate PDF dokument.

Problem pa je seveda v dejstvu, da Word in Excel (pred verzijo 2003) ne znata izdelati PDF dokumentov… In kaj sedaj?

Profesionalna rešitev

Dobro; seveda obstaja prava, profesionalna in seveda zelo draga rešitev, kjer kupite program Adobe Acrobat in z njim izdelujete profesionalne PDF dokumente iz poljubnega programa ter s poljubnimi nastavitvami, opcijami…

Definitivno zlata opcija a na žalost zlata tudi v denarju.

Zastonj obvoz

V kolikor ne potrebujete ravno 1001 opcije PDF dokumentov, temveč želite izdelati PDF dokument, ki ga lahko pošljete komurkoli in ga bo slednji lahko neovirano bral in natisnil pa lahko posežete po zastonjski rešitvi.

Kako deluje zastonj obvoz?

Rešitev je znana že mnogo let in v tem času jo je ponudilo tudi mnogo podjetij. Ideja pa je v tem, da na vaš računalnik namestite navidezen tiskalnik (to je torej tiskalnik, ki v resnici ne obstaja, le vaš računalnik misli, da je tam 🙂 ). Ta navidezni tiskalnik pa ne tiska na papir, temveč tiska v PDF dokument. Izhod tiskalnika torej ni list papirja temveč PDF dokument.

Kot je vidno na sliki s to rešitvijo dobite še celo več kot vam nudi MS Pisarna 2007 (2010), zato jo lahko uporabite četudi že imate »nov« Word oz. Excel. S pomočjo navideznega tiskalnika lahko namreč natisnete PDF dokument iz poljubnega programa, ki zna tiskati.

Preprosto v programu izberete opcijo Tiskaj in kot tiskalnik izberite navidezni PDF tiskalnik. V tem trenutku vas bodo Okna vprašala za ime datoteke in po pritisku gumba OK vas bo na disku čakala nova PDF datoteka z izbrano vsebino.

Kako do navideznega PDF tiskalnika

Kot rečeno že v uvodu je takšne programske opreme kar nekaj in spodaj vam podajam nekatere povezave do nagrajenih programov (vsi omenjeni so dobili nagrade različnih računalniških revij in je praktično vseeno katerega izberete):

mRačuni 2003 in PDF dokumenti

mRačuni v verziji 2003 ne znajo izdelovati PDF dokumentov in zatorej lahko uporabite omenjen obvoz ter vsak račun natisnete na takšen virtualni tiskalnik ter s tem dobite PDF obliko računa natanko tako kot vam to nudi program mRačuni v verziji 2007 oz. 2010.

Uporabna stran za vse iskalce rešitev v okviru MS Office

Ko sem danes pomagal uporabnikom slo-tech foruma, se je med pomočniki pojavil nov uporabnik (no pravzaprav ne vem ali je nov – vsekakor ga prej še nisem zapazil). No reči želim, da sem iz odgovorov uvidel, da oseba ve o čem govori. Kliknil sem na njegov podpis, ki me je ponesel na njegovo spletno stran.

Stran http://office.blog.siol.net/ sicer ne nudi preobilice informacij v povezavi z MS Pisarno je pa uporabna stran in na njej najdete nekaj dobrih orodij, predvsem za poslovanje malih podjetij. Ker bom še v tem tednu tudi sam izdal Excelovo aplikacijo za izdajo računov bomo mogoče kdaj v prihodnosti tudi kaj sodelovali 🙂

No kakorkoli; kje pa vi dobite (iščete) informacije za Word, Excel,VBA in ostalo druščino?

Vodni žig v Excelu

Vodnega žiga (to je tekst (ali slika!) v ozadju vsake strani, ki podaja pomembno informacijo) v Excelu še zmeraj nismo dočakali – pa bi ga večkrat potrebovali.

V Excelu recimo tiskamo cenike in vsakem podjetju se cene spreminjajo, včasih hitro, drugič počasneje a še huje je, ko izpis samo testiramo. Uporabnikom želimo ponuditi lep in uporaben cenik zato pač testiramo različne opcije in tako natisnemo različne cenike… A kaj ko vsi niso namenjeni kupcem in danes, ko vsi iščejo samo svoje pravice, lahko naletite na kupca, ki najde takšen cenik in zahteva izdelek po ceni, ki je napisana na tistem ceniku – cena pa je napačna – testna!

A ni vse izgubljeno!

Relativno preprosto pa tudi v Excelu dosežemo, da se na vsak list izpiše (izriše) poseben »vodni žig« in se s tem rešimo mnogih problemov:


Rešitev pa je preprosto v tem, da v poljubnem programu – lahko tudi v navadnem Risarju, ki ga dobimo z Okni – narišemo sliko v kateri napišemo tekst, ki ga želimo v ozadju ali pa narišemo sliko, ki jo želimo v ozadju. Ne pozabite pa, da morate to sliko (tekst) dovolj osvetliti, da bo res lepo sedla v ozadje, in da se bo prava vsebina videla skozi!

Ko imate torej sliko narisano, jo preprosto dodate v zaglavje lista in s tem dosežete, da bo Excel to sliko izrisal v ozadju povsem vsakega lista.

Postopek

  1. (Excel 2003) Izberete Datoteka/Priprava strani in odpre se novo okno(Excel 2010) Na zavihku ‘Postavitev strani’, kliknite na gumbek pri opciji ‘Priprava strani’
  2. Na novem oknu izberete zavihek Glava/Noga
  3. Kliknete gumb ‘Glava po meri’
  4. Odločite se ali želite sliko bolj levo, desno ali na sredini
  5. Iz nabora gumbov kliknete predzadnji gumb (slika gore s soncem v ozadju) in odpre se novo okno v katerem poiščite vašo sliko in jo izberite
  6. Vse skupaj potrdite!

Ščitenje resursov v VBA končni primer

Za konec tega kratkega sprehoda skozi ščitenje resursov v okolju VBA (prvi del, drugi del in tretji del), si poglejmo še zaključni primer, torej ščitenje dostopa do datoteke.

Prikazal bom preprost razred, ki hrani številko (VBA do datotek prihaja preko številk, ki jih dodeli posamezni datoteki) in v kolikor je številka postavljena, kar pomeni, da je bila datoteka odprta, jo ob uničenju objekta zapre in uniči številko.

Z uporabo takšnega razreda oz. spremenljivke tega razreda lahko zanesemo na dejstvo, da bo vsaka datoteka, ki smo jo odprli tudi zaprta.

Razred za zaščito dostopa datotek

Option Explicit

' tu hranimo ID datoteke
Private idDatoteke

Private Sub Class_Initialize()
  ' na začetku ID-ja datoteke ne poznamo,
  ' saj datoteke še nismo odprli
  idDatoteke = -1
End Sub

Private Sub Class_Terminate()
  ' v kolikor smo datoteko odprli
  ' jo tudi zapremo
  If (idDatoteke > 0) Then
    Close #idDatoteke
  End If
End Sub

' s to funkcijo datoteko odpremo in tudi izvemo ali
' nam je odpiranje uspelo ali ne
Public Function Odpri(imeDatoteke As String, _
                      vhod As Boolean) As Boolean
  ' predpostavimo, da nam odpiranje ne bo usplo
  Odpri = False

  ' pridobimo novo število
  idDatoteke = FreeFile

  ' v primeru napake odregiramo
  On Error GoTo napaka

  ' ali želimo datoteko pisati ali brati
  If (vhod) Then
    Open imeDatoteke For Input As idDatoteke
  Else
    Open imeDatoteke For Output As idDatoteke
  End If

  ' če smo prišli do sem, je odpiranje uspelo
  Odpri = True

  ' končamo
  Exit Function

napaka:
  ' če smo tu, pomeni, da odpiranje ni uspelo
  idDatoteke = -1
End Function

' samo okrajšava gornje funkcije
Public Function OdpriZaBranje(imeDatoteke As String) _
                              As Boolean
  OdpriZaBranje = Me.Odpri(imeDatoteke, True)
End Function

' samo okrajšava gornje funkcije
Public Function OdpriZaPisanje(imeDatoteke As String) _
                              As Boolean
  OdpriZaPisanje = Me.Odpri(imeDatoteke, False)
End Function

' lastnost, ki nam vrne identifikacijsko
' številko datoteke, preko katere se bomo
' nanjo sklicevali
Public Property Get id()
  id = idDatoteke
End Property

Primer uporabe

Option Explicit

Sub beriDatoteko(ime As String)
  ' ustvarimo spremenljivko
  Dim dat As New clsDatoteka

  ' v kolikor datoteke ne moremo odpreti končamo
  If (Not dat.OdpriZaBranje(ime)) Then Exit Sub

  ' spremenljivka, kamor bomo prebrali vsebino
  Dim vrstica

  ' vrtimo se dokler ne pridemo na konec datoteke
  Do While Not EOF(dat.id)
    Line Input #1, vrstica ' preveremo vsebino
    MsgBox vrstica ' in jo izpišemo
  Loop

  ' datoteka se bo zaprla sama
End Sub

Sub pisiDatoteko(ime As String)
  ' ustvarimo spremenljivko
  Dim dat As New clsDatoteka

  ' v kolikor datoteke ne moremo odpreti končamo
  If (Not dat.OdpriZaPisanje(ime)) Then Exit Sub

  ' pišemo
  Print #dat.id, "Prva vrstica v datoteki"
  Print #dat.id, "Druga vrstica v datoteki"
  Print #dat.id, "Tretja vrstica v datoteki"
End Sub

Sub Test()
  Dim ime As String

  ime = "d:\test.out"

  ' to ne bo uspelo
  beriDatoteko ime

  ' če ste ustrezno ureili ime bo to uspelo
  pisiDatoteko ime

  ' če je uspelo pisanje, bo tudi branje
  beriDatoteko ime
End Sub

Ščitenje resursov v VBA III

V prejšnjem prispevku sem prikazal kako idejo o ščitenju realizirati v praksi, danes pa podajam še prvi konkretni primer, ki bo prikazal resnično uporabnost.

Hitrejše izvajanje makrov

Za hitrejše izvajanje makrov v Excelu je priporočljivo ustaviti preračunavanje, saj sicer Excel ob vsaki spremembi, ki bi vplivala na druge celice vse tiste celice preračunava in če to ponovimo 1000x se preračunavanje izvede 1000x!

Dobro je tudi preprečiti nepotrebno osveževanje ekrana, saj sicer uporabniku zaslon nenehno utripa in okna ter podatki skačejo sem ter tja.

Nenazadnje pa je dobro (če jih ne potrebujemo) izključiti tudi odzive na dogodke.

Vse skupaj lahko torej strnemo v sledečo kodo:

With Application
    .Calculation = xlCalculationManual  ' preprečimo preračunavanje
    .ScreenUpdating = False    ' ne osvežujemo ekrana
    .EnableEvents = False  ' ugasnemo dogodke
End With

Seveda pa je potrebno ob koncu makra vse to postaviti nazaj:

Sub VelikMakro()
  ' zamrznemo
  With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
  End With

  ' tu vmes je veliko kode

  ' vzpostavimo nazaj
  With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    .EnableEvents = True
  End With
End Sub

Test

A da bo stvar bolj zanimiva, izvedimo majhen test. Poglejmo kako dolgo se bo izvajal sledeč makro:

Sub TestnaFunkcija()
  Range("A1").Formula = "=cos(A2)*tan(A2)/sin(a3)"
  Range("A2").Formula = "=1/A3"

  Dim i As Long
  For i = 1 To 100000
    Range("A3") = i
  Next
End Sub

Sub KlicTestneFunkcije()
  TestnaFunkcija
End Sub

Sub IzvediTest()
  Dim cas: cas = Now
    KlicTestneFunkcije
  MsgBox "Trajanje (v sec): "; ((Now - cas) * 24 * 60 * 60)
End Sub

Če izvedem makro IzvediTest, se na testnem računalniku izvaja 19 sekund.

Objekt, ki bo vzpostavil stanje

Napišimo torej objekt, ki bo ob inicializaciji »zamrznil« Excel in ga ob koncu makra vzpostavil nazaj:

Option Explicit

Private Sub Class_Initialize()
  With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
  End With
End Sub

Private Sub Class_Terminate()
  With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    .EnableEvents = True
  End With
End Sub

Poimenujmo ga clsZamrzni.

Nov test

Popravimo sedaj funkcijo tako, da uporabimo pridobljeno znanje. Uporabimo torej objekt. Popravimo testni klic:

Sub KlicTestneFunkcije()
  Dim zamrzni As clsZamrzni

  Set zamrzni = New clsZamrzni
  TestnaFunkcija
End Sub

Če sedaj na mojem testnem računalniku izvedem funkcijo IzvediTest, se slednja izvede v manj kot sekundi… 😉

Ščitenje resursov v VBA II

V prejšnjem blogu sem omenil, da nam pri ščitenju resursov lahko pomagajo objekti in zdaj je čas, da si ogledamo kako.

Napišimo torej skrajno preprost objekt, ki ima samo konstruktor, destruktor ter inicializacijsko funkcijo, ki mu postavi ime, da mu lažje sledimo (poimenujmo ga objSciti):

Option Explicit

Private ime As String

Private Sub Class_Initialize()
  Debug.Print "NOV "
End Sub

Private Sub Class_Terminate()
  Debug.Print "BRIŠEM "; ime
End Sub

Public Sub init(aime As String)
  ime = aime
  Debug.Print "  POSTAVIM "; ime
End Sub

Uporabimo ga v preprosti proceduri:
Sub Proc()
  Dim a As New objSciti
  a.init "prvi"
End Sub

Če proceduro izvedemo, dobimo sledeč rezultat:
NOV
  POSTAVIM prvi
BRIŠEM prvi

Če funkcijo pogledamo, nam je jasno, da izpis niza ‘NOV’ povzroči prva vrstica kode, izpis niza ‘POSTAVIM prvi’ povzroči druga vrstica kode… Kaj pa izpis tretjega niza? Tretji niz pa izpiše destruktor, ki ga VBA pokliče sam ob zaključku procedure.

Malce nižje bomo sicer spoznali tudi, da pravzaprav prvi dve vrstici izpiše funkcija ‘init’, a to zdajle niti ni pomembno.

Kaj če funkcijo preoblikujemo tako, da sprejme ime in jo potem kličemo iz neke druge funkcije? Omenjena ideja je predstavljena spodaj:

Sub Proc2(ime As String)
  Dim a As New objSciti
  a.init ime
End Sub

Sub TestProc2()
  Dim i
  For i = 1 To 20
    Proc2 "spr"; i
  Next
End Sub

Če izvedemo testno proceduro ‘TestProc2‘, dobimo sledeč rezultat
NOV
  POSTAVIM spr1
BRIŠEM spr1
NOV
  POSTAVIM spr2
BRIŠEM spr2
… in tako dalje …
NOV
  POSTAVIM spr20
BRIŠEM spr20

To je torej lep dokaz, da se objekt ob zaključku funkcije avtomatično uniči in nam za to ni potrebno skrbeti. Iz rezultata je namreč vidno, da se funkcija izvede 20x in vsakič kliče proceduro, ki objekt ustvari in ga tudi uniči. In to preprosto dejstvo nam lahko reši neprespane noči ob iskanju hrošča 🙂

Konkreten primer uporabe vam bom prikazal naslednjič, za danes pa podajam samo še dve zelo pomembni opozorili.

Opozorilo1

V kolikor ste navajeni klasičnih programskih jezikov, kot sta recimo C in C++ lahko pridete na idejo, da vso pomembno programsko kodo postavite v konstruktor in ustrezno čiščenje v destruktor…

TODA, če v VBA-ju ne uporabite vsaj ene javne funkcije/ metede/ lastnosti objekta, ga VBA izvajalno okolje ne bo naredilo. Torej VBA takšnega objekta sploh nikoli ne bo ustvaril.

Če prejšnjo funkcijo preoblikujete takole:

Sub Proc2(ime As String)
  Dim a As New objSciti
' objekta nikoli ne uporabimo
' zato ga VBA sploh ne bo ustvaril!
End Sub

Program ne bo izpisal ničesar!

Opozorilo2

V kolikor ste navajeni klasičnih programskih jezikov, kot sta recimo C in C++ lahko pričakujete, da bo VBA uničil objekt ob koncu programskega bloka. A to v primeeru VBA-ja ne drži. VBA uničuje objekte samo na koncu funkcij /procedur.

Primer je lepo viden, če v testni proceduri ne kličemo procedure, temveč objekt direktno ustvarimo:

Sub TestProc3()
  Dim i
  For i = 1 To 20
    ' VBA bo objekt ustvaril samo 1x !
    Dim a As New objSciti

    ' lastnosti bo spreminjal ISTEMU objektu
    a.init "spr"; i
  Next  ' objekt a ne bo uničen tukaj

  ' temveč bo uničen šele tukaj
End Sub

Sedaj pa je izpis povsem drugačen:
NOV
  POSTAVIM spr1
  POSTAVIM spr2
… in tako dalje …
  POSTAVIM spr20
BRIŠEM spr20

Na primeru je lepo vidno, da VBA ustvari en sam objekt. Bodite pozorni na to!

Ščitenje resursov v VBA

Kot klasični C/C++ programer sem obseden od ščitenja resursov!

Da najprej razčistimo, kaj resursi sploh so. V računalništvu so resursi pravzaprav vse kar računalnik uporablja, kot programerja pa nas najbolj zanimajo pomnilnik, datoteke in zunanje naprave.

Pri ščitenju resursov je ideja v tem, da vedno zagotavljate dvoje:

  1. Če resurs zasežete ga tudi sprostite.
  2. Vse resurse sproščajte čim prej. Če jih ne potrebujete več jih sprostite!

Primer je recimo odpiranje datoteke. Program odpre datoteko, piše vanjo in jo na koncu zapre… Toda, kaj če jo pozabi zapreti? Kaj če se v programski kodi zgodi napaka in se datoteka ne zapre? To je težava in nanjo je potrebno biti pozoren.

V Excelu pa se večkrat srečamo s povsem enakovrednim problemom preračunavanja. Da bi makro v Excelu tekel hitreje v večini primerov na začetku postavimo preračunavanje na ročno – izvedemo makro in postavimo preračunavanje nazaj na avtomatično

A kaj če pozabimo oz. se zgodi napaka 🙁 ? Uporabnik ostane z delovnim zvezkom, ki se ročno preračunava in seveda je zmeden…!

Sub Delujoce()
  Dim oldCalculation
  oldCalculation = Application.Calculation
  Application.Calculation = xlCalculationManual

  ' tu vmes je veliko vrstic kode…
  Dim i As Long
  For i = 1 To 10000
    Debug.Print i
  Next

  Application.Calculation = oldCalculation
End Sub

Toda čez nekaj časa kodo popravljamo in zapišemo nekaj takšnega…?
Sub NEDelujoce()
  Dim oldCalculation
  oldCalculation = Application.Calculation
  Application.Calculation = xlCalculationManual

  ' tu vmes je veliko vrstic kode…
  Dim i As Long
  For i = 1 To 10000
    Debug.Print i

    ' PROBLEM!!!
    If (i Mod 123 = 12) Then Exit Sub
  Next

  Application.Calculation = oldCalculation
End Sub

Sedaj se bo v nekem primeru funkcija zaključila prej in Excel ostane v ročnem preračunu! Napaka!

Rešitev

Rešitev ponuja objektno programiranje oz ideja konstruktorjev ~ destruktorjev. Konstruktor je funkcija, ki se izvede ob ustvarjanju objekta, destruktor pa se zgodi ob uničenju objekta. Lepota obeh funkcij je v tem, da sta privzeti in ju ni potrebno eksplicitno klicati.

Dobro; konstruktor pokličemo vedno ko objekt ustvarimo – to kot programerji zagotovo naredimo. A objekt se ob koncu ob koncu funkcije uniči avtomatično. No natančneje rečeno,  se objekt uniči ob koncu njegove življenske dobe, ki je odvisna od tega,kje ga ustvarimo… A to zdajle ni tako pomembno.

In to je ključ do uspeha. V konstruktorju zasežemo resurse, ob destruktorju pa se slednji avtomatično sprostijo in vse je lepo in prav.

Kako to izvesti v VBA-ju pa pokažem naslednjič.

Microsoft Mathematics

Po tedenskem oddihu na smučišču je čas za opis zelo uporabnega orodja, ki se lepo integrira v Word, kar je tudi razlog, da ga na mojem blogu sploh omenjam.

Stvar je namreč v tem, da lahko s pomočjo Microsoft Mathematics orodja, ki ga MS ponuja povsem zastonj(!), izdelate zelo lepe grafe in jih vstavite oz. uvozite v vaš Wordov dokument.

Seveda pa omenjen program nikakor ni namenjen samo izdelavi lepih grafov, temveč je predvsem zelo uporabno orodje za vsakega srednješolca, lahko pa reši marsikatero težavo tudi na fakulteti, v kolikor slednja le ni preveč tehnično usmerjena.

A grafi seveda niso edin kar program zmore. Z njim namreč lahko:

  • Računate – obnaša se kot napreden kalkulator
  • Rešujete enačbe
  • Iščete odvode, integrale, limite….
  • Računate z matrikami
  • Računate s kompleksnimi števili
  • Rišete 2D in 3D grafe



Ah; da… na žalost pa tale kolaček ni v slovenskem jeziku, temveč bo potrebno poznati angleščino ali pa vsaj katerega izmed drugih “svetovnih” jezikov.

Add-in Express razvoj dodatka – dodatek je izdelan

V prejšnjih blogih sem prikazal:

In sedaj je čas, da namestitveno datoteko tudi zaženemo :)…

Po namestitvi, ki je klasična Windows instalacija, se na računalniku ne zgodi nič posebnega… dokler ne zaženemo katerega izmed Office programov. Naš dodatek smo razvili za Word, Excel in PowerPoint.

Če na mojem razvojem računalniku instaliram omenjen dodatek in zaženem MS Office 2007, dobim sledečo sliko, kjer se lepo vidijo trakovi z našim gumbom

Če zaženem katerega izmed programov MS Office 2010 (ki so celo v angleški različici) dobim trak z našim gumbom

In če isto datoteko instaliram na računalniku, kjer tečejo Okna XP in MS Office 2003, dobim novo Office 2003 orodno vrstico

In to je bistvo vsega… Razvijemo en dodatek in stvar magično teče na vseh-mogočih in nemogočih verzijah MS Pisarne… Božansko 🙂 🙂 …

Moje osebno mnenje o Add-in Express

Osebno menim, da je Add-in Express čudovit programski paket, ki neizmerno olajša razvoj Office dodatkov, predvsem se njegova moč pokaže, če morate razvijati dodatke za različne verzije MS Pisarne – v tem primeru gre za nepogrešljiv dodatek. Trenutno je njegova edina slaba stran dejstvo, da ne morete (vsaj ne dokaj preprosto) izdelati slovenske namestitvene datoteke – škoda(!) – upam da se bo to kmalu (tudi z mojo pomočjo) izboljšalo!