Avatar billede bufli Mester
10. april 2021 - 09:18 Der er 5 kommentarer

Hvordan debugger man sin VBA kode i en UserForm

Hej,

Jeg arbejder på en UserForm, og har svært ved at debugge min kode. Når jeg anvender F8 går den ind i den del der hedder "Private Sub UserForm_Activate()". Jeg har brug for at køre nogle flere sub's som via CommandButtons skal tage nogle værdier jeg har tastet ind i min UserForm og sende tilbage til Excel, men hvis jeg bare kører F8, F8, F8 osv. i "Private Sub UserForm_Activate()", så kommer jeg jo til "End Sub" uden at jeg har fået chancen for at taste nogle værdier ind i min UserForm - så jeg kan ikke rigtigt debugge at værdierne bliver sendt tilbage til Excel.

I de øvrige sub's jeg har lavet til denne UserForm kan jeg ikke afprøve koden, for hvis jeg stiller mig i den anden sub og trykker F8, så hopper den ned i "Private Sub UserForm_Activate()" og kører derfra.

I bund og grund vil jeg jo gerne debugge følgende scenarie:
1. Åben UserForm med F8
2. Indtast noget i min UserForm
3. Trykke på en CommandButton og se at det bliver sendt til Excel
Avatar billede ebea Ekspert
10. april 2021 - 09:57 #1
Når du bruger debug F8 i din VBA project oversigt, kan du se hvad der sker i koden (og i Excel vinduet). Og når du når til punktet hvor User Form'en åbner, så kan du jo indtaste i den, og sende til hvor det nu skal, men så kan du ikke hoppe tilbage til din debugger, og fortsætte. Da skal du stoppe User Form'en. Og så er du tilbage til start (men så fik du også set om det virkede).

.
Avatar billede bvirk Guru
10. april 2021 - 10:12 #2
Et par alternativer er måske:
- indsæt stop statements og brug "run"
- anvend watches - hvis f.eks en variabelel tildeles noget der stammer fra key input, så lad denne variabel indeholde noget andet indtal da, og lad en watch stoppe på variabel <> før input værdi.

Ja, det kan være forvirende at single steppe - jeg har oplevet at tabe focus og synes det handler nok så meget om at udtænke og konkludere. Bruger mest stop statements!
Hvis koden er strukteret lagvis - altså ting der kalder ting der kalder osv i subs og functions, er endnu 2 ting der er nice:
- step over (er det shift f8 i excel?)
- brug stack trace for hoppe tilbage fra et break, error condition eller stop statement - for at kigge eller sætte next statement

Held med det - jeg kender ikke excel som sådan - men vba editoren er jo i mange af office programmerne
Avatar billede bufli Mester
11. april 2021 - 07:01 #3
Tak for jeres input. Jeg synes det med at indsætte den lille cirkel i den grå margin af koden (hvad hedder det så når man gør sådan?) er en tålelig løsning, men hold op hvor jeg mangler at kunne debugge ordentligt.

F.eks. har jeg min UserForm_Activate kode. Den åbner koden op og gør nogle ting, og så er UserFormen klar til brug. Det betyder jo reelt, at koden er afsluttet. Derefter indtaster jeg nogle ting i UserFormen, og så er det her det bliver svært at debugge - for hvordan simulerer jeg at indtastningen ordentligt i debuggeren. Jeg mangler reelt at kunne taste direkte i UserFormen i debug mode, og så se step for step hvad der sker
Avatar billede ebea Ekspert
11. april 2021 - 08:25 #4
#3 - Jeg forstår ganske enkelt ikke, hvad det er du vil debugge, når din kode er afviklet (User Form'en er startet). At indtaste i dine tekst felter, er jo ingen fejlkilde.
Og at se hvor det indtastede lander tilbage i dit ark, er jo heller ikke anledning til et problem, fordi du jo kan se om det indtastede reelt lander i de celler du har angivet i din kode. Så, ja, jeg forstår ikke rigtigt hvad det er du vil tjekke!
Avatar billede bufli Mester
11. april 2021 - 08:38 #5
Hej ebea,

Ovenstående er relateret til et andet spørgsmål som jeg roder med
https://www.computerworld.dk/eksperten/spm/1036950?k=8378282

Problemet er, at mine variabler er rigtige, men i min UserForm kommer koden forkert ud. Tallet 104.953,16 er gemt i min variabel, men kommer ud som 10.495.316,00 i min TextBox i min UserForm. Det vil jeg gerne debugge

Jeg har lidt fornemmelsen af, at det der driller mig er relateret til at min værdier ikke behandles som tal hele vejen igennem. Jeg har dim'et min variabel som currency og sat variablen lig med værdien i en celle i excel (altså de 104.953,16) som så vises i en TextBox hvor den viser 10.495.316,00
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester