24. oktober 2013 - 10:24Der 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:
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.
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
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.
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.
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.
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.