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

Access VBA

Min indgangsvinkel til VBA var, at jeg overhovedet ikke har arbejdet "hands on" med kode, siden de første par år af ingeniørstudiet, hvorfor min overordnede målsætning var "blot at komme komme i gang" dvs få en overordnet forståelse for hvordan strukturen i det hele var. Det har jeg fået og mere til.

Der er lagt vægt på øvelse, så man selv skal "bøvle" med koden, uden at få alt for meget forærende. Det er godt. Øvelserne har jeg oplevet, som værende bygget op, så man får en "værktøjskasse" med komponenter, som i et vist omfang kan genindgå i nogle af de efterfølgende øvelser. Også det er fint. Det stimulerer en til at tænke kreativt.

Alt i alt er mine forventninger indfriet.   ..

Lars Aaboe Kristensen, Ribe Amt, Teknik og Miljø

Excel VBA

Meget hurtigt og kompetent feedback...

Sparring på den opgave, som jeg sidder og arbejder med.

Veltilrettelagte øvelser

Claus Witfelt, Flyvevåbnets Officersskole

Excel VBA

Det har været meget nærværende og personlig fjernundervisning med hurtige svar på spørgsmål og feedback på opgaver. Der har været stor engagement og ejerskab fra underviserens side.

Det faglige niveau har været vekslende mellem "begynder" og "ekspert" opgaver.

Brian Deleuran, Radiometer

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

Access VBA

Rigtig god og hurtig respons fra underviser. Skal ikke vente ret lang tid på at få et svar på en problemstilling og spørger man efter en uddybning til eksempelvis en kode, kommer der hurtigt et svar, så man kan komme videre. Har fornemmelsen hele vejen igennem at underviser er villig at bruge den nødvendige tid på en, så man kan få løst opgaven. Bliver tvunget til at arbejde med opgaven, der er ikke nogen nem genvej, hvilket er rigtig godt.

Brian Lind Olsen, OUH Odense Universitetshospital

< >
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.