Gå till innehåll

Makro - använda samma sökväg när PDF skapas - Excel 365 för företag


Gå till lösning Löst av MH_,

Recommended Posts

Har ett makro som idag ser ut så här:

Sub Mark2PDF()
    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\temp\mark2pdf.pdf" _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
End Sub

Jag skapar alltså en PDF av markerat område och sparar filen med ett specifikt namn på en specifik plats.

Jag vill att filen ska sparas på samma plats som Excelboken makrot körs från. (Makrot ligger dock i 'Egna makron')

Filnamnet kan få vara fast men det kan vara bra om filnamnet kan ärva bokens namn.

Hur ska det se ut då?

 

Länk till kommentar
Dela på andra webbplatser

ActiveWorkbook, thisWorkbook och Me betyder lite olika saker

MsgBox "boken du jobbar med finns i mappen: " & ActiveWorkbook.Path
MsgBox "makrot ligger i mappen: " & ThisWorkbook.Path

Vill du ha sökvägen till excelfilen som du kopierar området ifrån? Om den är sparad borde det här funka:

Sub test()
Dim sSökväg As String
sSökväg = ActiveWorkbook.Path
'lägga på filnamnet
sSökväg = sSökväg & "\" &ActiveWorkbook.Name
End Sub

Om du startar makrot från ett formulär tror jag att du kan använda 

ME.xxxx

också.  Men "ME." är ganska flummigt. Jag är nästan säker på att Monshi låste en tråd om det där på Eforum
 

  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

Det enklaste är väl bara att ta bort 5 tecken på slutet. Om du är osäker (om det t.ex finns filer i gamla . xls format) så kan du istället hitta den sista punkten (med InStrRev)och ta bort allt till höger om den.

Sub qwwerty()
Dim sSökväg As String
Dim sFilnamn As String

sSökväg = ActiveWorkbook.Path
sSökväg = sSökväg & "\"

sFilnamn = ActiveWorkbook.Name
sFilnamn = Left(sFilnamn, InStrRev(sFilnamn, ".") - 1)

sSökväg = sSökväg & sFilnamn & ".pdf"
End Sub
 

Där jag antar att den sista .PDF kan tas bort

  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

  • 3 veckor senare...

Du kan använda DIR (funkar som gamla doskommandot). Om du tar med filnamnet i din "Dir" så kan du se om du får ett svar eller inte

If Not Dir(sSökväg & sFilnamn) = "" Then
     MsgBox "Filen finns redan "
End If

Eller, med en val-box där du kan välj att avbryta

InputBox function (Visual Basic for Applications) | Microsoft Learn
VBA - Dialog Box - Automate Excel

T.ex så här (avbryter om du säger nej. Annars fortsätter makrot)

Dim svar As Integer
If Not Dir(sSökväg & sFilnamn) = "" Then
    svar = MsgBox("Filen finns redan. Vill du skriva över?", vbYesNo)
        If svar = vbNo Then
            Exit Sub
        End If
End If

 

Eller så här om du vill ge chansen att byta filnamn istället

If Not Dir(sSökväg & sFilnamn) = "" Then
    svar = MsgBox("Filen finns redan. Vill du ändra namn?", vbYesNo)
        If svar = vbYes Then
            sFilnamn = InputBox("Ange nytt namn", , sFilnamn)
        End If
End If

Ja. Du måste naturligtvis fixa det som skall göras före/efter. Men du fattar principen.

 

  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

Tack!

Min kod ser nu ut så här:

Sub Mark2PDF()
'
' Mark2PDF Makro
' Skapar PDF av markerat område
'

'
   Dim sSökväg As String
Dim sFilnamn As String

sSökväg = ActiveWorkbook.Path
sSökväg = sSökväg & "\"

sFilnamn = ActiveWorkbook.Name
sFilnamn = Left(sFilnamn, InStrRev(sFilnamn, ".") - 1)

sSökväg = sSökväg & sFilnamn & ".pdf"

Dim svar As Integer
If Not Dir(sSökväg) = "" Then
    svar = MsgBox("Filen finns redan. Vill du skriva över?", vbYesNo)
        If svar = vbNo Then
            Exit Sub
        End If
End If

    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        sSökväg _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
       

End Sub

Jag plockade bort & sFilnamn eftersom jag la in snutten där sSökväg blivit både sökväg och filnamn.

(När jag testade med snutten att byta namn vet jag inte var filen hamnade)

Länk till kommentar
Dela på andra webbplatser

  • Lösning
Du kan ju hålla isär filnamn och sökväg tills du är färdig med kontrollen. Typ:
...början på makrot...
sFilnamn = ActiveWorkbook.Name
sFilnamn = Left(sFilnamn, InStrRev(sFilnamn, "."))
sFilnamn = sFilnamn & "pdf"

If Not Dir(sSökväg & sFilnamn) = "" Then
    svar = MsgBox("Filen finns redan. Vill du ändra namn?", vbYesNo)
        If svar = vbYes Then
            sFilnamn = InputBox("Ange nytt namn", , sFilnamn)
        End If
End If
' Sen slår du ihop den oförändrade sökvägen med det (eventuellt) ändrade filnamnet så att du bara får en sträng i ditt fortsatta makro:
sSökväg = sSökväg & sFilnamn

....Resten av ditt makro....

  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

Tack igen!

Då blev det:

 

Sub Mark2PDF()
'
' Mark2PDF Makro
' Skapar PDF av markerat område
'

'
Dim sSökväg As String
Dim sFilnamn As String

sSökväg = ActiveWorkbook.Path
sSökväg = sSökväg & "\"
sFilnamn = ActiveWorkbook.Name
sFilnamn = Left(sFilnamn, InStrRev(sFilnamn, "."))
sFilnamn = sFilnamn & "pdf"

If Not Dir(sSökväg & sFilnamn) = "" Then
    svar = MsgBox("Filen finns redan. Vill du ändra namn?", vbYesNo)
        If svar = vbYes Then
            sFilnamn = InputBox("Ange nytt namn", , sFilnamn)
        End If
End If

sSökväg = sSökväg & sFilnamn

    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        sSökväg _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
       
End Sub

 

Redigerad av Mikael63
Länk till kommentar
Dela på andra webbplatser

Delta i dialogen

Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.

Gäst
Svara i detta ämne...

×   Du har klistrat in innehåll med formatering.   Ta bort formatering

  Only 75 emoji are allowed.

×   Din länk har automatiskt bäddats in.   Visa som länk istället

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Skapa nytt...