Excel VSTO

Det har naturligvis været rigtig godt, at kunne gennemgå kursus i sit eget tempo, hvilket har betydet meget for mig, da jeg så har kunne få det daglige arbejde til at passe ind.

I modsætning til en traditionel undervisningsform, hvor kurset er berammet til en fast tid og man derfor bliver nødt til, at sætte en tidsgrænse for de praktiske opgaver, har jeg kunne nørde lige så længe jeg vil, og dermed afprøve nogle flere teknikker, end der normalt er tid til.

Ved at køre kurset over flere uger, har jeg også haft tid til, at lade de nye informationer bundfælde og sætte sig bedre fast.

En rigtigt god ting har været, at jeg har kørt hele kurset på min egen (firmaet) maskine, med min egen opsætning. Har alt for ofte været på kurser ude af huset, på andre maskiner og når man så kom tilbage til ens egen pc, var det en anden opsætning, en anden version, eller andet der gjorde, at man ikke lige kunne komme igang med det man havde lært.

Jeg har kunne bruge mine hverdagsopgaver som opgaverne i kurset, hvilket jeg syntes er bedere end de normale "Hello World" opgaver.

Og så er jeg meget imponeret over den hurtige response der har været på indsendte opgaver og spørgsmål. Dejligt at jeg ikke skulle vente dage med, at kunne komme videre, men ofte i løbet af minutter eller timer.

Jan Amdi Letvad, PFA Pension

Excel VBA

Godt med muligheden for sparring med underviser og forslag til andre løsningsmetoder end mine egne - selvom mine også fungerede.

Godt med muligheden for ingen tidsbegræsning for kurset. Havde jeg - pga. arb. situation, brug for.

Anja Hansen, TDC

Word VBA

Nemt at komme igang.
Hurtige og gode svar på øvelser og spørgsmål.

Sune Jeppson, Arbejdernes Landsbank

Excel VBA

Det har været godt at selv kunne bestemme farten, samt bruge al den tid man nu selv synes for at lave opgaverne.

Det har været et hårdt kursus, men jeg har virkelig lært meget og er mere rustet til at lave nye makroer, hvor jeg så selv kan gå i i VBA og lave rettelser, fordi jeg kan forstå programmet.

Margit Gravgaard Larsen, Novo Nordisk A/S

Excel VBA

Tak for et rigtigt godt og lærerigt kursus.

En af de store fordele ved kurset er, at man kan tage det i det tempo man ønsker og der er ikke noget tidspres.

Opgaverne er gode og udfordrene. Man kan selv, indenfor rammerne, bestemme hvor meget man vil gøre ud af det.

Beskrivelserne til opgaverne er lavet på en sådan måde, at der er også overladt lidt til ens egen fantasi, som jeg synes er en meget god ting.

Kurset har et rigtigt godt niveau, og materialet er godt lavet.

Underviseren ??? Ja, jeg ved ikke hvornår han sover.

Der går ikke lang tid efter man har sendt en opgave, til den er rettet, og altid med en god og konstruktiv kommentar. Også man får underviserens løsningsforslag.

Der er altid hurtig og god hjælp at hente, hvis man er gået i stå. Man får ikke bare løsningen, men et hint, så man kan komme videre.

Jeg vil varmt anbefale det til andre, og gør det !

Endnu engang tak for et godt kursus.

Med venlig hilsen

Peter Juul Jacobsen

Peter Juul Jacobsen, Mærsk Olie & Gas A/S

Excel VBA

Det har bestemt været pengene værd. Jeg kender flere, som har taget VBA kursus on-site i et par dage eller deromkring , og de har slet ikke fået det samme ud af det som jeg har via denne side. Jeg har allerede udviklet små og større modeller til min arbejdsplads, og modellerne bruges allerede internationalt, det havde jeg ikke kunnet uden dette kursus.

Det er kanon, at man får personlig feedback og det går som regel tilmed hurtigt. Dygtig læremester, som sætter sig ind i mine specifikke problemstillinger - det er et stort plus. Den personlige kontakt er max vigtig.

Jeg vil anbefale dette til andre, der spørger til dette.

Michael Mortensen, DLH

< >
Se flere referencer

Introduktion til C#

Som sagt er dette ikke et kursus i C#, men lad os alligevel se på de mest almindelige konstruktioner.

Nedenstående er mest tænkt som et opslagsværk, som du kan vende tilbage til, hvis du skulle blive i tvivl om ét eller andet.

Procedure

En procedure i C# ser sådan her ud:

private void HelloWorld()
{
  Excel.Worksheet wks = 
        (Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet;
  wks.Range["A1"].Value = "Hello World";
}

Inden vi går videre skal vi lige se på ovenstående. Bemærk følgende

  1. Alle linjer slutter med ; (det er vigtigt)
  2. Vi bruger {} til at markere, hvad der hænger sammen.
  3. Vi bruger [] når vi har fat i et indeks (i VBA bruger man () både i forbindelse med indeks og funktionskald, men i C# er de to typer adskilt)
  4. void angiver at der ikke er nogen returværdi fra proceduren
  5. private angiver at den kun kan bruges lokalt. Man kan også skrive public, hvis det skal bruges flere steder.
  6. Man kan lave linjeskift (næsten) som man har lyst - det er ; der markerer at linjen er slut.
  7. (Excel.Worksheet) er det vi kalder en typecast, det markerer at det efterfølgende skal konverteres til typen Excel.Worksheet).

 Funktion

Og en funktion:

private string ToGangeTekst(string indTekst)
{
  return indTekst + " " + indTekst;
}

 Og et eksempel på, hvordan man kan kalde sådan en funktion.

wks.Range["A1"].Value = ToGangeTekst("Hello World");

 Bemærk følgende:

  1. En funktion er magen til en procedure - bortset fra at vi skriver den datatype, der skal returneres i stedet for void og med return angiver, hvad der skal sendes retur
  2. Tekster sættes sammen med + (i modsætning til &, som du måske kender fra VBA).
  3. Man skriver altid datatype før variabel.

 Variable

Som nævnt ovenfor skriver man altid datatype før variabelnavn, så deklaration af variable ser sådan her ud:

string enTekst = "Hello World";
int etHeltal;
bool SandFalsk = true;
Excel.Worksheet wks =
(Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet;

 Bemærk:

  1. Man kan deklarere en variabel og give den indhold med det samme (det er dejligt)
  2. Man behøver ikke "Set" når man deklarerer et objekt (som man skal i VBA)

Betingelser

int etHeltal = 4;
if (etHeltal == 3)
{
  wks.Range["A1"].Value = "JA - tallet er 3";
}
else
{
  wks.Range["A1"].Value = "Nej - tallet er ikke 3";
}

Bemærk:

  1. Der skal være paranteser omkring betingelsen
  2. Vi bruger == når vi skal sammenligne og != når vi gerne vil teste for om ting er forskellige (! betyder NOT i C#)
  3. Igen bruger vi {} til at markere, hvad der hænger sammen (i ovenstående ekstempel er de faktisk ikke nødvendige, da der kun er én linje i hver blok, men det er god stil at sætte dem på alligevel).

Vi har også And og Or i C#, her er det er bare & og |  - og sætter man to efter hinanden bliver de efterfølgende ting kun evalueret, hvis det er nødvendigt - så vi skriver næsten altid && og ||.

Man kan naturligvis også:

switch (etHeltal)
{ 
  case 0:
    wks.Range["A1"].Value = "JA - tallet er 0";
    break;
  case 1:  case 2:  case 3:  case 4:  case 5:
    wks.Range["A1"].Value = "Tallet er mellem 1 og 5";
    break;
  case 6:
    wks.Range["A1"].Value = "Tallet er 6";
    break;
  default:
    wks.Range["A1"].Value = "Jeg kender ikke tallet";
    break;
}

Svarende til Select Case fra VB. 

Løkker

for (int i = 1; i <= 10; i++)
{
   wks.Range["B" + i.ToString()].Value = i;
 }

Bemærk:

  1. Første parameter angiver startværdien (og man skal angive datatypen her)
  2. Næste parameter angiver, hvor der skal sluttes (man kan godt f.eks. have et funktionskald her, hvis man skulle have lyst til det)
  3. Og til slut - hvordan der skal tælles op. i++ er det samme som i = i + 1 (det er smart)

Vi tager lige én mere:

int i = 1;
foreach (Excel.Worksheet loopwks in Globals.ThisWorkbook.Worksheets)
{
  wks.Range["C" + i.ToString()].Value = loopwks.Name;
  i++;
}

 

Simpel dialog

System.Windows.Forms.MessageBox.Show("Hej med dig","Overskift");

 Og skriver man 

using System.Windows.Forms;

I toppen af koden kan man nøjes med at skrive

MessageBox.Show("Hej med dig","Overskift");

Og vil man have svar retur kan man skrive:

DialogResult svar;
svar = MessageBox.Show("Hej med dig. Går det det godt?", "Overskift",
      MessageBoxButtons.YesNo);
if (svar == DialogResult.Yes)
{
  MessageBox.Show("SUPER!");
}
else
{
   MessageBox.Show("ØV");
}

Der er desværre ingen InputBox i C#, så du må klare dig med dialoger/forms, som er det næste vi skal kigge på.

Kommentarer

I C# kan man lave kommenterer på to måder:

// Dette er en kommentar, der kun fylder en enkelt linje
/* Og en der fylder flere linjer
* en linje mere (* i starten er ikke nødvendig - bare god stil)
* Og endnu en
* Og slut */

 

Når du har betalt for kurset får du adgang til øvelser til hver lektion. Og når du har fået godkendt din besvarelse får du desuden adgang til mine løsningsforslag med ekstra tips og trix.