Avatar billede Loaduce Nybegynder
24. oktober 2013 - 10:24 Der er 8 kommentarer og
1 løsning

Macro til at gemme ud fra valgt sti

Hej Eksperter,

Jeg har en velfungerende macro, som kan gemme mine regneark i pdf og excel format. Nu har jeg så langt om længe fået finpudset mit regne ark således det er klar til at blive delt til alle i min afdeling. Her kommer dog et problem! Ikke alle er lige erfarne med brug af excel. Derfor vil jeg gerne gøre det så let som muligt for dem at skifte stien sådan at macro'en stadigvæk gemmer i de mapper de beder om. Jeg har forsøgt mig med en celle hvor man indsætter stien i, men det virkede ikke. Har i nogen forslag? Jeg tænker noget i retning af en msgbox, som spørg hvor vil du gemme efterfulgt af en "stifinder" hvor man så vælger de respektive mapper til de enkelte ark.

Giver det mening? Nedenfor ses en af de makro jeg benytter til at gemme med:

Sub gemmefunk()
'PDF
  nr = [Ledninger!J3]
  nr1 = [Ledninger!K3]
  nr2 = [Ledninger!L3]
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "E:\Regioner\Øst\Sag-1\Br. " & nr & " " & nr1 & " " & nr2 & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
       
'Excel
Dim part1 As String
Dim part2 As String
Dim part3 As String
Dim part4 As String

part1 = Range("I3").Value
part2 = Range("J3").Value
part3 = Range("K3").Value
part4 = Range("L3").Value

ActiveWorkbook.SaveAs Filename:= _
"E:\Regioner\Øst\Sag-1\" & part1 & " " & part2 & " " & part3 & " " & part4 & " .xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

   
End Sub



På forhånd tak. 
PS der gives 100 ekstra point for et svar inden i d. 25.10.13 (Kl. 05:00)
Avatar billede Tryphon Nybegynder
24. oktober 2013 - 10:40 #1
Prøv at kalde denne funktion

Public Function GetOpenFilename(ByVal FileTypeLong As String, ByVal FileType As String, Optional ByVal HeaderText As String) As String
' FileType Format example: ".txt", ".xlsx"
' FileTypeLong Example: "Text Files", "Excel Files" etc.
  If HeaderText = "" Then
    HeaderText = "Open File"
  End If
  GetOpenFilename = Application.GetOpenFilename(FileTypeLong & "(*" & FileType & "), *" & FileType, , HeaderText)
End Function

Ekstra point er ikke tilladt i dette forum, så det afstår jeg fra. Brug koden, hvis du kan og giv mig besked, hvis jeg skal lægge et officielt svar.
Avatar billede Tryphon Nybegynder
24. oktober 2013 - 10:52 #2
Det gik lidt stærkt.

Det er vist snarere denne, du har brug for. :-)

Public Function GetSaveAsFilename(ByVal FileTypeLong As String, ByVal FileType As String, Optional ByVal HeaderText As String) As String
' FileType Format example: ".txt", ".xlsx"
' FileTypeLong Example: "Text Files", "Excel Files" etc.
  If HeaderText = "" Then
    HeaderText = "Save File As"
  End If
  GetSaveAsFilename = Application.GetSaveAsFilename(ActiveSheet.Name & FileType, FileTypeLong & "(*" & FileType & "), *" & FileType, , HeaderText)
  MsgBox GetSaveAsFilename
End Function

for at kalde den skal du erklære en variabel f.eks. "fn" og skrive

fn = GetSaveAsFilename( "Excel Files", ".xls")

Derefter activeworkbook.saveasfilename fn etc.
Avatar billede Loaduce Nybegynder
24. oktober 2013 - 21:35 #3
Det ser meget fint ud. Jeg har bare aldrig arbejdet med funktioner i Excel. Kan du eventuelt give et eksempel på hvordan man sætetr den op? skal den indsættes i et VBA-modul?  Når du skriver den skal kaldes hvad menes der præcist med det og hvordan gør jeg.

Sorry for min uvidenhed :(
Avatar billede Loaduce Nybegynder
24. oktober 2013 - 21:38 #4
Skal funktionen implementeres i min normale gemme makro?
Avatar billede Tryphon Nybegynder
25. oktober 2013 - 01:21 #5
Ja, du skal implementere den i din gemme makro.

Gem den funktion, jeg har skrevet ovenfor efter End Sub

I din Gemmefunk gør du så følgende

Lige efter  Sub Gemmefunk skriver du
Dim fn as string
fn = GetSaveAsFilename( "Excel Files", ".xls")

I din saveas erstatter du filnavnet med fn.
Avatar billede Loaduce Nybegynder
25. oktober 2013 - 07:25 #6
Jeg har nu sat det op sådan her.

Sub gemmefunk2()

Dim fn As String
fn = GetSaveAsFilename("Excel Files", ".xls")
'PDF
  nr = [Ledninger!J3]
  nr1 = [Ledninger!K3]
  nr2 = [Ledninger!L3]
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fn
       
'Excel
Dim part1 As String
Dim part2 As String
Dim part3 As String
Dim part4 As String

part1 = Range("I3").Value
part2 = Range("J3").Value
part3 = Range("K3").Value
part4 = Range("L3").Value

ActiveWorkbook.SaveAs Filename:=fn


End Sub
Public Function GetSaveAsFilename(ByVal FileTypeLong As String, ByVal FileType As String, Optional ByVal HeaderText As String) As String
' FileType Format example: ".txt", ".xlsx"
' FileTypeLong Example: "Text Files", "Excel Files" etc.
  If HeaderText = "" Then
    HeaderText = "Save File As"
  End If
  GetSaveAsFilename = Application.GetSaveAsFilename(ActiveSheet.Name & FileType, FileTypeLong & "(*" & FileType & "), *" & FileType, , HeaderText)
  MsgBox GetSaveAsFilename
End Function


Det virker delvist, men nu navngiver den desværre ikke filerne korrekt. Nu få filen navn efter arknavnet. Det jeg havde håbet på var noget i stil med at man vælger en destination første gang, hvorefter den så selv lægger stien for destinationen ind. Sådan at makroen køre igen. Giver det mening det jeg efterspørg. Altså i princippet skal funktionen kun hjælpe med at ændre stien.
Avatar billede Tryphon Nybegynder
25. oktober 2013 - 14:27 #7
Nej, det giver ikke helt mening. Formålet med GetSaveAsFilename funktionen er, at brugeren kan vælge sti/filnavn, der bliver returneret i en variabel (fn), og variablen styrer så, hvad SaveAs funktionen gemmer Excel mappen som. Hvis du ikke ændrer filnavnet, når du har Gem Som vinduet oppe, vil den naturligvis stadig gemme som arknavnet. GetSaveAsFilename indeholder både sti + filnavn. Man kan udlede stien ud fra variablen og evt. anvende InStrRev funktionen, men hvis du ikke er så erfaren med VBA, ville jeg satse på den lidt nemmere løsning.

Du kan ændre fn = GetSaveAsFilename("Excel Files", ".xls")
til fn = GetSaveAsFilename(part1 & " " & part2 & " " & part3 & " " & part4 & " .xlsm","Excel Files", ".xls"), så vil dit valgte filnavn blive foreslået.

Ulempen er, at brugeren selv kan ændre filnavn undervejs, så du har ikke sikkerhed for, at det altid vil være dit filnavn, der bliver brugt.

Et godt tip er, at du inde fra VBA vinduet trykker F1 og skriver den funktion, du vil have hjælp til. Det er faktisk en ikke helt ringe hjælp MS har udviklet.
Avatar billede Loaduce Nybegynder
17. december 2013 - 13:14 #8
Hov, jeg havde sgu da glemt at give dig dine point. Hvis du lige smider et svar så acceptere jeg dem
Avatar billede Tryphon Nybegynder
18. december 2013 - 08:38 #9
Bedre sent end aldrig :-)

Håber du kunne bruge det.
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



IT-JOB

Danske Commodities A/S

Data technician trainee

Ward247 ApS

IT Operations Manager

MAN Energy Solutions

Full Stack Developer

Acrelec Danmark

IT-supporter