Avatar billede boogjanne Nybegynder
07. juli 2004 - 11:15 Der 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?
07. juli 2004 - 11:27 #1
Hvis du i VBA-editoren vælger menuen Insert->module, kan du her skrive:
Public varXX as String
07. juli 2004 - 11:28 #2
eller
Pulic const XX = "boogjanne"
Avatar billede boogjanne Nybegynder
07. juli 2004 - 23:00 #3
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

Kan du se, hvad jeg gør galt?
Hilsen
07. juli 2004 - 23:25 #4
står dette i et modul eller i en workbook:
DECLARATIONS:
Public Fil1, Fil2 As Workbook?

Det skal stå i t modul.

Endvidere skal hver variabel erklæres fuldt ud, for at det er korrekt:
Public Fil1 As Workbook, Fil2 As Workbook
Avatar billede boogjanne Nybegynder
08. juli 2004 - 01:45 #5
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.
08. juli 2004 - 08:48 #6
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

Du kan forøvrigt single-steppe med F8
Avatar billede boogjanne Nybegynder
08. juli 2004 - 09:44 #7
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.

Bor du forresten i Randers ?

Hilsen
08. juli 2004 - 09:57 #8
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)

Kill "C:\Temp\" & Fil1


Niks, jeg er sjællænder (Solrød) :)
Avatar billede boogjanne Nybegynder
08. juli 2004 - 11:24 #9
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
08. juli 2004 - 11:27 #10
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)
Avatar billede boogjanne Nybegynder
08. juli 2004 - 11:37 #11
Tak
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