Avatar billede biscon Nybegynder
29. maj 2006 - 15:14 Der er 6 kommentarer

Nulstille VBA fortolkeren (reset project) fra kode

Hejsa er ved at smide et lille excel ark sammen der indeholder
en masse indtastede spørgeskemaer. Når brugeren trykker på en knap generer den et par nye ark med grafer, optællinger og så videre. Det  er fint nok. Mit problem er at excel går kold hvis anden gang jeg kører makroen. Det virker dog fint hvis jeg trykker på "stop" knappen i VBA editoren først (Reset project). Eller lukker og åbner arket. Jeg ved ikke hvem der har fået den geniale ide men virker som om VBA fortolkeren gemmer state information der kun bliver clearet når man trykker stop knappen. Den løber for løkker igennem engang for meget (eller for lidt) og andre ubehagelige sideeffekter.
Mit spørgsmål er derfor om det er muligt at "trykke" på den reset knap inde fra koden. Således at man kan køre det flere gange i træk uden at få besynderlige resultater. Jeg kan ikke bede brugeren om at åbne VBA editoren og gøre det manuelt.
Derudover vil jeg gerne brokke mig til verden over Excel. Kan godt være det er fint til almindelig kontormus brug men skriver du en makro over 100 linier er du næsten garanteret at løbe ind i en eller anden idiotisk bug. Og don't get me started on VBA..

anyway håber nogle af jer ved hvordan man arbejder udenom det problem og på forhånd tak for hjælpen.

btw det er Excel 2002.
Avatar billede bak Forsker
29. maj 2006 - 16:04 #1
prøv lige at smide koden herind... jeg tror ikke på at man kan lave en autoReset. Jeg tror mere på fejl 40 :-)
Avatar billede Slettet bruger
29. maj 2006 - 23:33 #2
Husker du at rydde pænt op efter dig til sidst i din kode ?
Dvs. Lukke åbne workbooks, dereferere objektreferencer (Set objekt = Nothing) osv.

'End' kommandoen vil muligvis give dig den ønskede effekt. Den trækker hårdt i nødbremsen og lukker alle referencer ned og resetter alle variabler.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vastmEnd.asp


Programmatisk kan du "trykke" på reset knappen ved følgende kodestump:

Application.VBE.CommandBars.FindControl(ID:=228).Execute

MEN...Bare fordi man kan er det ikke det samme som at det er den rigtige måde at gøre det på. Lad os se noget kode... :-)
Avatar billede biscon Nybegynder
30. maj 2006 - 14:55 #3
Hehe trust me drenge, i har ikke lyst til at se koden, det er kontor VBA spaghetti af den bedste skuffe og der er mere af den end det ville være praktisk at paste herind.

til bak: det med løkken er jeg ret sikkert ikke er en fejl 40. Jeg har singlesteppet lortet i debuggeren og tjekket variabler. Et anden grund til at jeg er ret sikker på at det endnu engang er excel der viser sit grimme ansigt er at hvis jeg ikke trykker stopknappen og genkører makroen, så står labels i alle søjlediagrammer på skrå. Mens hvis jeg resetter inden jeg kører programmet står de ligesom jeg har oprettet dem.
Den kode jeg singlesteppede er en loop hvor jeg kan se på alle variablerne i inspektoren at den kun skal eksekvere 8 gange, alligevel bliver den kørt 9 gange (og nej jeg er ikke faldet for den med ikke at tælle 0 med :). Derudover er jeg ikke typen der skyder skylden på fortolkeren/kompileren med det samme. Jeg skriver normalt C++ og er vant til at ligemeget hvor bizar en fejl forekommer er det så godt som altid mit eget problem. Men Excel er ikke ligefrem kendt for at være bugfri :).

Det skal dog nævnes at koden er baseret på at excel selv blanker offentlige variabler. Der er heller ingen problemer med optællingerne. Det er som sagt kun i løkker og med generede diagrammer jeg får problemer.

Tror jeg skal følge blackadders råd og så cleare hele lortet for en sikkerhedsskyld.

tak for hjælpen folkens
Avatar billede biscon Nybegynder
30. maj 2006 - 14:56 #4
eeh hvor interfacet til at fordele point blevet af? *g*
Avatar billede bak Forsker
30. maj 2006 - 18:50 #5
Hvis du ikke har lyst til at paste koden ind, kunne du jo prøve at sende filen til mig på:

excel snabela tbdl.dk
Avatar billede Slettet bruger
30. maj 2006 - 20:58 #6
Det ville undre mig meget hvis din kode indeholdte fejl som ikke er set før i Excel kategorien her på stedet. Og af dine 200 point for spørgsmålet har vi indtil videre kun fortjent 5 af dem.

Kom nu, lad os se din kode. Vi kan godt tåle det. Om ikke andet lad bak kigge det igennem derhjemme.
Nu er vi også nysgerrige for at se om der virkelig er en bug i VBA fortolkeren.  :-)
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
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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