07. juli 2004 - 11:15Der er
10 kommentarer og 1 løsning
Dim/Public var/const
Jeg har en Excelmakro med 10 på hinanden følgende Sub's. Jeg har brug for at erlære en var/const, som kan kaldes i flere Subs. Det kan jeg ikke få til at virke. Er der en af jer, der vil fortælle mig, hvad jeg gør forkert?
Tak for svaret, men jeg synes ikke det bringer mig længere, selvom det ser rigtigt ud.
Jeg har en stor datamængde som fra .csv fil importeres, sorteres, formateres og udskrives. Makro kører i Workbook 1, som kun indeholder VBA kode. Data manipuleres i Workbook 2 (til udskrift på papir) og Workbook 3 (til exportfil). Programmet kører perfekt, når jeg bruger 2 midlertidige filer, som tidligt navngives.
I bogen Excel 2003 programmering med VBA, af Sharon Podlin (oversættelse Jes Nyhus) er på side 116 vist eksempel på filnavn variabel, som senere almindeligt navngives, gemmes og lukkes. Men jeg kan stadig ikke få filnavn variabler til at virke.
Programmet kører fint indtil der skal skiftes mellem de 2 Workbooks med Var Fil1 og Fil2, navne, så kommer fejlmeddelelse ”out of range”. Når jeg kører procedurer med aktiveret Watch-Window, kommer foran Varnavne en Stifinder streg, og langt nede på den liste står både Fullname og Name (f.eks. Mape11/12).
Den væsentligste kode ifm. filnavne har jeg skrevet således: DECLARATIONS: Public Fil1, Fil2 As Workbook Virker ikke Dim rk, nrk, Rækker, Svar As Integer Virker fint (altid indenfor 1 procedure) Dim øvrige Virker fint (altid indenfor 1 procedure) _______________________________
Sub 1 Set Fil1 = Workbooks.Add Skulle indeholde filnavn (Mappe x1) øvrig kode Sub 2 - Sub 3 - Sub 4 - Sub 5 Set Fil2 = Workbooks.Add Skulle indeholde filnavn (Mappe x2) øvrig kode Sub 6-8-9 Her flyttes data mellem de 2 Workbooks. Det skal styres af Var Fil1 og Fil2. Sub 10 Her skal Workbooks navngives (med dato) og gemmes
I mit sidste forsøg har jeg samlet alle makroer og declarations i Workbook1 Modul 1. De 2 variabler er erklæret fuldt ud hver for sig. Tror du der kan ligge et problem i, at koden er skrevet i Workbook 1 (som ikke indeholder data overhovedet), og datamanipulation sker i Workbook 2 og 3? Manipulation sker jo næsten ved fjernbetjening. Men der er ingen problemer med de øvrige 400 kodelinier. Hilsen, det er sengetid nu.
Har du prøvet at lave et breakpoint i din kode? Et breakpoint stopper koden i den linie, som breakpointet er sat på. Når du står i din sub 6, 8 eller 9, så prøv at stille markøren i en linie, hvor Fil1 indgår og tryk derefter F9
Herefter starter du makroen som du pleger, hvorefter koden gerne skulle stoppe på dit breakpoint. Ved at holde musen over Fil1 kan du se om den indeholder en værdi, som er blevet sat i en anden procedure. Hvis den viser en værdi, ligger fejlen et andet sted end i variablen
F8 tasten er rigtig god, men både når jeg bruger den og når jeg kører run, stopper makro ved skift mellem "Fil1" og "Fil2" med fejlmeddelelse "Out of range". Jeg kan fint køre intil 1. fil-skifte. Men når jeg holder markør over Fil variabler vises ingen variabel værdier.
Men når nu programmet kører perfekt ved at bruge 2 navngive midlertidige filer, og sidst i afviklingen gemmer filerne under blivende navne, så sletter jeg de midlertidige filer inden næste programkørsel.
Problemet kunne jo løses ved at makroen sletter de 2 midlertidige filer efter den blivende navngivning og efter at de er lukket. Kan du give mig et tip til kodning af det? De midlertidige filer er placereti C:\Temp\Fil1 og Fil2.
Jeg er ikke helt sikker på, at jeg forstår hvad du gør og vil... Men hvis du vil slette en fil, kan du bruge kommandoen Kill (ja, det hedder den faktisk :o)
Bingo, Kill komandoen lyder skrækkelig, men den virker. Nu har jeg kun de rigtigt navngivne filer tilbage. Foreløbig vil jeg glemme alt om variable filnavne. Tak for hjælpen. Er det nu for lidt med de 60 point jeg tildelte spørgsmålet? Du har haft meget hovedbrud med det. Hilsen Henry Poulsen
Det skal du ikke tænke på. Sådan er spillets regler....det er ofte svært at vide på forhånd hvor svært et spm er og hvor lang tid, der bruges. Nogle gange får man mange point for et let spm og nogle gange får man få point for et svært spm.
60 point er meget rimeligt og ikke for lidt her :o)
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.