Hjælpe-tekst til egne funktioner

Når man har brugt lang tid til at lave en funktion eller anden makro, som også skal kunne bruges af andre, ville det være rart, hvis man også kunne gøre det nemmere for disse at bruge funktionen, ved at kunne lave online hjælp til denne. Dette er imidlertid ikke nær så nemt, som at lave selve funktionen. Den vigtigste årsag til dette er, at VBA ikke har et indbygget værktøj til at lave hjælpetekster med. Mere om forskellige værktøjer nedenfor.

Der findes forskelle typer af hjælp. Ser vi på en brugerudviklet funktion, en såkaldt UDF (User Defined Function), kan den fx se således ud

Function FInterval(cel As Long, rn As Range, kol As Byte) As Variant
    For Each c In rn.Columns(1).Cells
        If cel >= c.Value And cel<= c.Offset(0, 1).Value Then
            FInterval = Format(c.Offset(0, kol - 1).Value, "dd-mm-yy")
            Exit Function
        End If
    Next c
    FInterval = CVErr(xlErrNA)
End Function


se beskrivelsen af netop denne funktion her.

Den bruges ved at skrive fx =Finterval(A1;B1:E10;4) Ligesom Excels indbyggede funktioner, kan funktionen indsættes ved hjælp af Guiden Funktion (Indsæt - Funktion).

Lad mig se på den indbyggede funktion YDELSE(), der beregner den månedlige ydelse på et lån. Når denne funktion vælges fra kategorivinduet i Guiden, ser billedet ud som vist til højre. Som det måske kan anes vises under ruden "Vælg funktion" en oversigt over funktionens argumenter og en kort forklaring på, hvad funktionen bruges til. Nederst til højre i dialogboksen er der mulighed for at få yderligere hjælp til funktionen. Klikkes her vises et ganske almindeligt hjælpeskærmbillede.

Klikkes OK i dialogboksen vises skærmbilledet vist ovenfor til højre. Her gentages beskrivelsen af funktionen fra foregående billede, men desuden gives der hjælp til hvert argument, når man klikker i den rude, som hører til det pågældende argument. Også her kan der gives yderligere hjælp ved et klik på linket nederst til venstre i dialogboksen.

Prøver jeg at indsætte min hjemmebagte funktion på samme måde (UDF'er tilhører kategorien Brugerdefinerede funktioner), vises de samme to skærmbilleder; dog med en væsentlig forskel. I det første skærmbillede vises funktionens navn og tilhørende argumenter. Desuden fortælles, at der ikke er hjælp til rådighed. Klikker jeg Ok for at fortsætte til næste skærmbillede, får jeg samme besked. Der er heller ingen hjælp at hente til argumentruderne og i begge skærmbilleder kan man klikke lystigt på hjælpelinket nederst til venstre uden anden effekt, end at man igen får at vide, at der ikke er hjælp til rådighed.

Det ville være rart, hvis man kunne ændre på dette, men det er ikke nemt. Nemmest er det at få beskrivelsen af funktionen ind i de to skærmbilleder, da dette kan gøres internt i Excel. 

Indsæt en beskrivelse af funktionen og argumentbeskrivelser.

For at indsætte en beskrivelse af funktionen i disse skærmbilleder, skal man have VBA Editoren åben. Vælg nu View - Object browser. Under Classes skal du bladre ned til du finder navnet på det modul, du har funktionen i. Klik på navnet. Så ser billedet sådan ud:

I ruden Members of Modulnavn"  (her Module1), kan du se de procedurer, der er i det pågældende modul. Højreklik på den relevante procedure og vælg Properties. Nu vises en dialogboks, hvor du blandt andet kan indtaste en beskrivelse. Denne beskrivelse vises nu i  de ovenstående dialogboksen når du indsætter funktionen ad denne vej.

Desværre er det ikke helt så nemt, hvis man også skal lave hjælp til de enkelte argumenter. Dette kan nemlig ikke gøres internt i Excel, og indtil Laurent Longre lavede et hjælpeværktøj, kunne det faktisk slet ikke lade sig gøre. Longres værktøj kan findes her : http://xcell05.free.fr/. Kig under English page. Jeg vil ikke gennemgå funktionerne, men de virker kun, hvis ens egne programmer er gemt som et tilføjelsesprogam (det vender jeg tilbage til i en senere artikel). Også Longres funktion skal installeres som et tilføjelsesprogram i samme bibliotek, som indeholder det tilføjelsesprogram, der skal laves argumentbeskrivelser til. Når det er installeret kan man bruge hjælpen til at se, hvordan ens eget tilføjelsesprogram skal tilrettes, og hvordan man gør det.

Lyder det besværligt? Så bare vent til vi skal se på, hvordan man laver egentlig hjælp.

Hjælpefiler til Excel

Ligesom Excel ikke selv har en funktion, der kan lave argumentbeskrivelser, har den heller ikke en funktion, som kan lave hjælpetekster. I stedet må man installere et sådant værktøj på sin pc. Der er flere værktøjer, fx HTML Help Workshop, som kan downloades gratis fra Microsofts hjemmeside, men som til gengæld er lidt primitivt.  I dette kan man oprette "hjælpe-projekter" og hjælpefiler, og der kan laves og indsættes billeder. Desuden kan programmet kompilere hjælpefilerne, når de er skrevet. Det sidste er vigtigt, da hjælpen i Officepakken, og dermed også i de VBA projekter, man laver, er baseret på kompilerede html-filer, også kaldet CHM. Der findes også en række 3. partsprogrammer, som kan anvendes. Her kan nævnes fx CHM Editor og Help Generator. Specielt den sidste har en version til at lave hjælp specifikt til Excel VBA funktioner. Denne fungerer som et tilføjelsesprogram til Excel. Jeg vil ikke gennemgå disse 3. partsværktøjer i detaljer, men vil i stedet overlade det til den enkelte, selv at vurdere disse i forhold til det behov, mean har. Help Generator til Excel koster ca. 150 US dollar, til Acces ca. 300 dollars og man kan få til begge programmer for 400 dollars. Help Generator forudsætter at HTML Help Workshop også er installeret, da dette program anvendes til at compilere hjælpefilerne.

Nogle af disse programmer er nemmere end andre, da de udfører en del af arbejdet automatisk, men under alle omstændigheder, hvad enten det gøres automatisk eller manuelt, skal man gennem nogenlunde denne procedure:

Brug den valgte editor til at oprette filen, som altså bliver en html-help file. denne skal så til sidst kompileres til en CHM fil; det klarer de fleste af programmerne automatisk. Har du du hjælp til flere funktioner i samme hjælpefil (og det er nødvendigt, hvis du har mere end en Function i hvert modul) da der kun kan knyttes en hjælpefil til modulet), skal du allerede mens du opretter filen knytte en såkaldt Help Context Id til hver separate hjælp. Hvordan dette gøres, afhænger af editoren.

Når hjælpefilen er færdig, skal den knyttes til det relevante modul og den relevante funktion.

Åbn VBA editoren, hvis den ikke er åben i forvejen og åbn det relevante modul. Vælg så Tools - Project Properties. Her kan du specificere navnet på din hjælpefil. Nu vælger du View - Object Browser i VBA Editoren. Find det relevante modul på listen og klik på det. Nu vises de funktioner, der er i modulet. Højreklik på en af dem og vælg Properties. Nu kan du indtaste dit help context id. Gem regnearket igen.

Nu er din hjælp faktisk klar, og vises når du klikker på "Hjælp til denne funktion" i Guiden funtion. Så virker det på din egen pc. Nu skal du bare have pakket dine hjælpefiler sammen med den fil, der indeholder dine funktioner, på en sådan måde at de også kan pakkes rigtigt ud på de pc'er, hvor funktion og hjælp skal bruges. God fornøjelse!

Mit klare budskab her er, at det sjældent kan betale sig at lave online hjælp til sine funktioner, med mindre man arbejder hel- eller halvprofessionelt med dette. Er det hobbyfunktioner, eller "quick and dirty" funktioner" til venner og bekendte er det ikke  besværet og udgifterne værd. Det er nemmere at give dem en "løs" beskrivelse i form af et stykke papir eller en PDF-fil.

En quick and dirty løsning

Du kan også selv lave en Qucik and Dirty løsning, i hvert fald til funktioner, der indeholder Formularer.
 

Skal jeg lave en funktion, der har en formular, bruger jeg ofte det "trick", at jeg kun har en simpel hjælpetekst til hele min funktion. Denne laver jeg i en anden formular, der kun er forsynet med én eller flere etiketter, som så indeholder den hjælp, jeg vil give. Denne metode er fx brug i den lommeregner, du kan downloade her. I lommeregneren har jeg lavet en knap, Hjælp, som åbner en anden formular med hjælpen.

Denne formular er vist til højre. Men denne formular er åben, vil selve lommeregnerfunktionen fortsat være åben. Den er dog ikke modal, så der kan ikke arbejdes i lommeregneren mens hjælpen er åben.

Har du brug for flere "hjælpesider", kan du lade den første hjælpeside være en menu. Herfra kan nye knapper så åbne undersider. Indeholder funktionen i sig selv flere sider, kan hver af disse selvfølgelig forsynes med selvstændige hjælpesider.

Alternativt kan du lave knapper, som åbner filer fra andre programmer, fx PDF filer, men det kræver noget mere kodning, så det vil jeg ikke omtale her.

 

- Tilbage til Programmering -
- Tilbage til makroer -
- Tilbage til Excel -