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

Hurtig response på opgaver.

Udfordrende opgaver.

Flemming Pedersen, Semco Maritime

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

Excel VBA

Det er rart at kunne tage kurset i sit eget tempo, når det lige passer ind, men det giver også en risiko for at det lige bliver langstrækt nok, men så er det godt underviseren kan holde én lidt i ørerne med mails wink

Eva Bonne Alkærsig, EBA InterrimControlling

Excel VBA

At jeg kan fordybe når jeg har tid og lyst, er super.

Virkelig hurtig respons fra underviseren - næsten døgnet rundt :)

Øvelserne indeholdt hvad jeg skulle bruge, for at komme videre med egne vba-projekter.

At man kunne sammenligne egne løsninger med underviserens var lærerigt.

Henrik Boss, Marel Bornholm

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.