Avatar billede gnalling1 Nybegynder
15. april 2008 - 15:39 Der er 25 kommentarer og
2 løsninger

Gem fil VBA

Hej! Jeg har en fil, der bliver sendt ud til vores brugere, der automatisk skal gemme filnavnet. Se nedenfor:

Sub SaveFile()

Dim FileName As String
FileName = Range("c13") & " " & Range("c15") & ".xls"
ActiveWorkbook.SaveAs FileName

End Sub

Jeg vil gerne have, at det kun er muligt at gemme filen en gang ved brug af makroen, da nogle af parametrene skal deaktiveres, når filen er blevet gemt. Hvordan får jeg gjort, så filen kun kan gemmes 1 gang, og hvis man så prøver at bruge makroen igen, skal der komme en meddelses, der siger: "File has already been saved - please use the template to create a new file". Derudover skal kontrolelementet "Liste" deaktiveres. Hvordan gør jeg det?
Avatar billede Slettet bruger
15. april 2008 - 15:44 #1
du kunne jo teste om filen allerede eksisterede, hvis den da gør det. Jeg går ud fra at c13 og c15 skifter?
Avatar billede gnalling1 Nybegynder
15. april 2008 - 15:55 #2
Ja, filen eksisterer allerede. Jeg er ved at lave en template, der skal ud til alle vores datterselskaber, så jeg er i gang med at teste filen af, og den skal kunne tage højde for de fleste ting.
Avatar billede gnalling1 Nybegynder
15. april 2008 - 15:55 #3
Og ja c13 og c15 skal skifte for hver gang de rapporterer til os.
Avatar billede kabbak Professor
15. april 2008 - 18:16 #4
her er hvordan du tjekker om den er der i forvejen

Sub SaveFile()
    Dim FileName As String
    If Dir(Range("c13") & " " & Range("c15") & ".xls") = "" Then
        FileName = Range("c13") & " " & Range("c15") & ".xls"
        ActiveWorkbook.SaveAs FileName
    Else
        MsgBox "File has already been saved" & vbCrLf & "please use the template to create a new file"
    End If
End Sub
Avatar billede kabbak Professor
15. april 2008 - 18:17 #5
Jeg kan ikke se, at du har en sti, foran filnavnet, hvor gemmer den ??.
Avatar billede kabbak Professor
15. april 2008 - 18:21 #6
man kan også teste sådan her

If ThisWorkbook.Name = Range("c13") & " " & Range("c15") & ".xls" Then
        MsgBox "File has already been saved," & vbCrLf & "please use the template to create a new file"
    End If
Avatar billede word-hajen Nybegynder
15. april 2008 - 23:08 #7
Da filen sker ud til at blive dannet på baggrund af en skabelon, vil der ikke være en sti til filen, førend den er gemt. Du kan derfor teste således:

    If ThisWorkbook.Path <> "" Then
        MsgBox "The file has been saved before. You cannot use this tool again."
    End If

Fordelen/ulempen ved denne er naturligvis, at man så kan bruge værktøjet til at gemme oveni en allerede eksisterende fil, blot den nye fil ikke er gemt endnu.
Avatar billede gnalling1 Nybegynder
16. april 2008 - 09:38 #8
Hej Kabbak! Den virker rigtigt godt, hvis man ikke ændrer nogle af parametrene, så første del fungerer perfekt. Problemet er nu, at brugerne stadigvæk kan ændre selskabsnavn og så gemme filen igen - nu under det nye navn. For at undgå det, bliver man vel nødt til at deaktivere kontrolelementet "Liste", så de ikke er i stand til at vælge et andet selskab? Jeg testede det lige ved at vælge et andet selskab og det blev bare gemt under det nye selskabs navn. Hvordan undgår man, at de kan vælge et andet selskab i listen? Angående stien så vil vi ikke kunne kontrollere, hvor de skal gemme filerne men bare være sikker på, at vi modtager filen i et filnavn, som vi kan kontrollere og derfra selv gemme den, hvor den skal ligge.
Avatar billede kabbak Professor
16. april 2008 - 11:31 #9
det der 'kontrolelementet "Liste", er det i en form, eller er det i et ark ??

Hvis det er i en form
Me.Liste.Enabled = False
Avatar billede kabbak Professor
16. april 2008 - 11:37 #10
hvis det er i aktive ark

ActiveSheet.OLEObjects("Liste").Object.Enabled = False
Avatar billede gnalling1 Nybegynder
16. april 2008 - 15:35 #11
Hej Kabbak!

Det er i det aktive ark, men jeg får følgende fejlmeddelelse:

Run time error 1004:

Kan ikke angive egenskaben OleObjects for klassen Worksheet.
Avatar billede kabbak Professor
16. april 2008 - 18:30 #12
Jeg får ikke fejl, er du sikker på at den hedder "Liste"
Avatar billede gnalling1 Nybegynder
16. april 2008 - 22:03 #13
Tjekker lige i morgen på arbejdet....
Avatar billede kabbak Professor
16. april 2008 - 23:37 #14
du kunne også prøve at rette

ActiveSheet

til

Worksheets("Ark1")

ret selv Ark1 til navnet på det ark den er i.
Avatar billede gnalling1 Nybegynder
17. april 2008 - 09:38 #15
Det er en List box.
Avatar billede kabbak Professor
17. april 2008 - 10:10 #16
Ja, men hvad er navnet
Avatar billede gnalling1 Nybegynder
17. april 2008 - 10:36 #17
ActiveSheet.Shapes("List Box 2").Select

og

ActiveSheet.Shapes("List Box 3").Select
Avatar billede kabbak Professor
17. april 2008 - 10:41 #18
Ved mig hedder den  ActiveSheet.Shapes("ListBox2").Select

men hvis din hedder, "List Box 2"

skal denne linje

ActiveSheet.OLEObjects("Liste").Object.Enabled = False

være

ActiveSheet.OLEObjects("List Box 2").Object.Enabled = False
Avatar billede gnalling1 Nybegynder
17. april 2008 - 10:52 #19
Jeg får desværre samme fejl igen! Har prøvet også at skrive "ListBox2". Kan jeg prøve noget andet?
Avatar billede kabbak Professor
17. april 2008 - 12:41 #20
Jeg har lige tjekket, den liste du bruger, er IKKE fra kontrolelementer, den er fra Formularer.

Jeg er ikke sikker på at man disable dem, som kontrolelementer.
Avatar billede gnalling1 Nybegynder
17. april 2008 - 13:26 #21
Det er jeg ked af. Håber ikke du har brugt for meget tid! Har du måske et forslag til, hvordan jeg så kan håndtere, at de ikke kan gemme den samme fil med et andet navn?
Avatar billede kabbak Professor
17. april 2008 - 15:00 #22
du må kunne bruge den som Word-hajen skrev 15/04-2008 23:08:20.

For hvis det du sender ud, er en skabelon, så har den ingen sti(Path), før den er gemt.
Så hvis den har det, er den gemt før.
Avatar billede gnalling1 Nybegynder
17. april 2008 - 15:40 #23
Hej Kabbak!

Når jeg kører den med Wordhajens input, gemmer den filen men kommer så frem med msgboxen alligevel. Hvordan undgår jeg så det første gang, jeg gemmer?

Sub SaveFile()
    Dim FileName As String
   
      If Dir(Range("c13") & " " & Range("c15") & ".xls") = "" Then
        FileName = Range("c13") & " " & Range("c15") & ".xls"
        ActiveWorkbook.SaveAs FileName
           
    End If
   
      If ThisWorkbook.Path <> "" Then
        MsgBox "The file has been saved before. You cannot use this tool again."
    End If

   
End Sub
Avatar billede gnalling1 Nybegynder
17. april 2008 - 15:43 #24
Hej igen! Jeg ændrer bare teksten, så meddelsesboksen kommer op første gang man gemmer, så virker det jo perfekt. Tusind tak for hjælpen til jer begge. Hvordan deler man points imellem jer?
Avatar billede word-hajen Nybegynder
17. april 2008 - 19:08 #25
Når kabbak også har lagt et svar, kan du fordele point. Jeg synes, at du skal give de fleste til kabbak, som er den, der har lagt kræfterne her.
Avatar billede kabbak Professor
18. april 2008 - 11:42 #26
et svar ;-))
Avatar billede gnalling1 Nybegynder
21. april 2008 - 09:51 #27
Tusind tak for hjælpen!
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