Avatar billede tida Juniormester
20. april 2004 - 10:49 Der er 19 kommentarer og
2 løsninger

Hjælp til makro

Jeg har en fil med ca. 50 knapper med tilhørende makroer der hver især åbner diverse filer. Inden den åbner filen tester den på om filen er skrivebeskyttet og i positiv fald giver den meddelelse herom.

Nu kunne jeg godt tænke mig at selve testen var i en overordnet makro evt. kaldet "beskyttelse", således at jeg ikke skal skrive den samme makrostump ind i 50 rutiner...men alene kunne nøjes med at indtaste filennavnet i de 50 og henvise til "beskyttelse".
Kan nogen evt. hjælpe med det. ??

Jeg indsætter lige den nuværende makro :

Sub STED_rap()
application.DisplayAlerts = False

    On Error GoTo test
    Workbooks.Open "K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS", , , , , , , , , , False
    Exit Sub
test:
    svar = MsgBox("Filen er låst af anden bruger. Åbn alligevel ??", vbOKCancel)
    If svar = 1 Then Workbooks.Open "K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS" Else: Exit Sub
   
application.DisplayAlerts = True

 
End Sub
Avatar billede sjap Praktikant
20. april 2004 - 10:55 #1
Lav en funktion som du kalder i stedet for at sende selve meddelelsen:

Function VisFejl()

svar = MsgBox("Filen er låst af anden bruger. Åbn alligevel ??", vbOKCancel)

End Function
Avatar billede sjap Praktikant
20. april 2004 - 10:57 #2
Ups - skal lige ændres til:

Function Svar() as Integer
  svar = MsgBox("Filen er låst af anden bruger. Åbn alligevel ??", vbOKCancel)
End Function

Og så kan SUb'en ændres til


Sub STED_rap()
application.DisplayAlerts = False

    On Error GoTo test
    Workbooks.Open "K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS", , , , , , , , , , False
    Exit Sub
test:
    If svar = 1 Then Workbooks.Open "K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS" Else: Exit Sub
   
application.DisplayAlerts = True

 
End Sub
Avatar billede sjap Praktikant
20. april 2004 - 11:04 #3
Der er måske også en simplere måde for dig. Du kan lave en global konstant med tekststrengen

Global Const strSvar As String = "Filen er låst af anden bruger. Åbn alligevel ??"

I din sub skal du så blot skrive:
svar = MsgBox(strSvar, vbOKCancel)
Avatar billede sjap Praktikant
20. april 2004 - 11:06 #4
Bemærk at "Global Const" sætningen skal placeres UDENFOR alle andre sub'er og funktioner.
Avatar billede tida Juniormester
20. april 2004 - 11:10 #5
Som du kan forstå skriver jeg fordi jeg ikke er en makro ekspert, jeg har netop brug for hjælp til dette. Det jeg efterlyser lyder som noget af det du forslår...men det er ikke nok hjælp for mig...."global konstant" siger mig nada....jeg har brug for du skriver begge de 2 makroer....helt præcist.

Det som det hele handler om er at jeg gerne vil være fri for at have 50 lange makroer som er ens og hvis eneste variabel alene er fil navnet.
Avatar billede sjap Praktikant
20. april 2004 - 11:14 #6
Du erstatter blot den nuværende sub med det nedenstående (du kopierer bare hele dyne herfra og over i dit makroark).

Global Const strSvar As String = "Filen er låst af anden bruger. Åbn alligevel ??"

Sub STED_rap()
application.DisplayAlerts = False

    On Error GoTo test
    Workbooks.Open "K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS", , , , , , , , , , False
    Exit Sub
test:
    svar = MsgBox(strSvar, vbOKCancel)
    If svar = 1 Then Workbooks.Open "K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS" Else: Exit Sub
   
application.DisplayAlerts = True

 
End Sub
Avatar billede sjap Praktikant
20. april 2004 - 11:14 #7
Øjeblik!
Avatar billede sjap Praktikant
20. april 2004 - 11:16 #8
Der var lige en enkelt ting mere. Så skal du kun skrive filnavnet én gang i hver sub.

Global Const strSvar As String = "Filen er låst af anden bruger. Åbn alligevel ??"

Sub STED_rap()
application.DisplayAlerts = False

    strFilNavn = "K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS"
    On Error GoTo test
    Workbooks.Open strFilNavn, , , , , , , , , False
    Exit Sub
test:
    svar = MsgBox(strSvar, vbOKCancel)
    If svar = 1 Then Workbooks.Open strFilNavn Else: Exit Sub
   
application.DisplayAlerts = True

 
End Sub
Avatar billede tida Juniormester
20. april 2004 - 11:16 #9
Jeg kan ikke rigtig se den store besparelse i det du foreslår

kunne evt. også godt tænke mig at være fri for at indsætte filnavnet 2 gange...hvis du forstår ??
Avatar billede tida Juniormester
20. april 2004 - 11:18 #10
Nå da...du kom mig lige i forkøbet med filnavnet....men kunne det ikke gøres kortere, jeg sparer vel egentlig kun 1 linie væk ??
Avatar billede sjap Praktikant
20. april 2004 - 11:18 #11
To sjæle, én tanke :0)
Avatar billede sjap Praktikant
20. april 2004 - 11:22 #12
Du kan også bruge nedenstående - så indeholder sub'en kun én linie.


Global Const strSvar As String = "Filen er låst af anden bruger. Åbn alligevel ??"

Function AabenFil(strFilNavn As String)
application.DisplayAlerts = False
    On Error GoTo test
    Workbooks.Open strFilNavn, , , , , , , , , False
    Exit Sub
test:
    svar = MsgBox(strSvar, vbOKCancel)
    If svar = 1 Then Workbooks.Open strFilNavn Else: Exit Sub
application.DisplayAlerts = True
End Function

Sub STED_rap()

AabenFil("K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS")
 
End Sub
Avatar billede sjap Praktikant
20. april 2004 - 11:23 #13
Så er den globale konstant også overflødig:

Function AabenFil(strFilNavn As String)
application.DisplayAlerts = False
    On Error GoTo test
    Workbooks.Open strFilNavn, , , , , , , , , False
    Exit Sub
test:
    svar = MsgBox("Filen er låst af anden bruger. Åbn alligevel ??", vbOKCancel)
    If svar = 1 Then Workbooks.Open strFilNavn Else: Exit Sub
application.DisplayAlerts = True
End Function

Sub STED_rap()

AabenFil("K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS")
 
End Sub
Avatar billede sjap Praktikant
20. april 2004 - 11:26 #14
Hvis alle filerne ligger i den samme mappe, kan makroen forenkles yderligere.
Avatar billede sjap Praktikant
20. april 2004 - 12:08 #15
Tja, funktionen kunne godt lige trimmes på et par punkter (desuden sikres nu at Displaylerts er True, når funktionen slutter):

Function AabenFil(strFilNavn As String)
application.DisplayAlerts = False
    On Error GoTo test
    Workbooks.Open strFilNavn, , , , , , , , , False
    application.DisplayAlerts = True
    Exit Function
test:
    svar = MsgBox("Filen er låst af anden bruger. Åbn alligevel ??", vbOKCancel)
    If svar = 1 Then Workbooks.Open strFilNavn
    application.DisplayAlerts = True
End Function

Sub STED_rap()
    AabenFil("K:\OEKONOMI\Menu\Budget\Rap\STED_rap.XLS")
End Sub
Avatar billede tida Juniormester
20. april 2004 - 12:38 #16
Hej Superjab

YES....Se nu er vi inde på noget af det helt rigtige...det er lige noget i den stil jeg søger....jeg har kopieret din makro ind...filen åbner også fint....men meddelsesboksen vises ikke hvis filen er skrivebeskyttet ??
Avatar billede sjap Praktikant
20. april 2004 - 12:43 #17
Virkede det inden vi lavede det om? Jeg spørger fordi der er ikke ændret så meget, at selve grundfunktionen skulle være ændret.
Avatar billede tida Juniormester
20. april 2004 - 12:44 #18
Ja min makro virker
Avatar billede sjap Praktikant
20. april 2004 - 12:56 #19
I sætningen
    Workbooks.Open strFilNavn, , , , , , , , , False
mangler et komma!
Avatar billede tida Juniormester
20. april 2004 - 13:07 #20
Perfekt...flot set...og hurtigt....jeg takker !!!
Avatar billede sjap Praktikant
20. april 2004 - 13:09 #21
Husk at hvis alle filerne er placeret i samme mappe (eller bare første del af navnet er det samme), så er der mulighed for at forenkle sub'en en lille smule mere.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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