Note: The other languages of the website are Google-translated. Back to English

Kako shraniti delovni list kot datoteko PDF in ga poslati kot prilogo prek Outlooka?

V nekaterih primerih boste morda morali poslati delovni list kot datoteko PDF prek Outlooka. Običajno morate delovni list ročno shraniti kot datoteko PDF, nato v tem Outlooku ustvariti novo e-poštno sporočilo s to datoteko PDF kot prilogo in ga nazadnje poslati. Dolgotrajno ga dosežemo korak za korakom ročno. V tem članku vam bomo pokazali, kako hitro shranite delovni list kot datoteko PDF in ga samodejno pošljete kot prilogo prek Outlooka v Excelu.

Shranite delovni list kot datoteko PDF in ga pošljite kot prilogo s kodo VBA


Shranite delovni list kot datoteko PDF in ga pošljite kot prilogo s kodo VBA

Spodnjo kodo VBA lahko zaženete, da samodejno shranite aktivni delovni list kot datoteko PDF in ga nato pošljete kot prilogo prek Outlooka. Naredite naslednje.

1. Odprite delovni list, ki ga boste shranili kot PDF in ga poslali, nato pritisnite druga + F11 tipke hkrati, da odprete Microsoft Visual Basic za aplikacije okno.

2. V Ljubljani Microsoft Visual Basic za aplikacije okno, kliknite Vstavi > Moduli. Nato kopirajte in prilepite spodnjo kodo VBA v Koda okno. Oglejte si posnetek zaslona:

Koda VBA: shranite delovni list kot datoteko PDF in ga pošljite kot prilogo

Sub Saveaspdfandsend()
Dim xSht As Worksheet
Dim xFileDlg As FileDialog
Dim xFolder As String
Dim xYesorNo As Integer
Dim xOutlookObj As Object
Dim xEmailObj As Object
Dim xUsedRng As Range

Set xSht = ActiveSheet
Set xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)

If xFileDlg.Show = True Then
   xFolder = xFileDlg.SelectedItems(1)
Else
   MsgBox "You must specify a folder to save the PDF into." & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Must Specify Destination Folder"
   Exit Sub
End If
xFolder = xFolder + "\" + xSht.Name + ".pdf"

'Check if file already exist
If Len(Dir(xFolder)) > 0 Then
    xYesorNo = MsgBox(xFolder & " already exists." & vbCrLf & vbCrLf & "Do you want to overwrite it?", _
                      vbYesNo + vbQuestion, "File Exists")
    On Error Resume Next
    If xYesorNo = vbYes Then
        Kill xFolder
    Else
        MsgBox "if you don't overwrite the existing PDF, I can't continue." _
                    & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Exiting Macro"
        Exit Sub
    End If
    If Err.Number <> 0 Then
        MsgBox "Unable to delete existing file.  Please make sure the file is not open or write protected." _
                    & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Unable to Delete File"
        Exit Sub
    End If
End If

Set xUsedRng = xSht.UsedRange
If Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0 Then
    'Save as PDF file 
    xSht.ExportAsFixedFormat Type:=xlTypePDF, Filename:=xFolder, Quality:=xlQualityStandard
    
    'Create Outlook email 
    Set xOutlookObj = CreateObject("Outlook.Application")
    Set xEmailObj = xOutlookObj.CreateItem(0)
    With xEmailObj
        .Display
        .To = ""
        .CC = ""
        .Subject = xSht.Name + ".pdf"
        .Attachments.Add xFolder
        If DisplayEmail = False Then
            '.Send
        End If
    End With
Else
  MsgBox "The active worksheet cannot be blank"
  Exit Sub
End If
End Sub

3. Pritisnite F5 tipko za zagon kode. V Brskanje v pogovornem oknu izberite mapo, v katero želite shraniti to datoteko PDF, in nato kliknite OK gumb.

Opombe:

1. Zdaj se aktivni delovni list shrani kot datoteka PDF. Datoteka PDF je poimenovana z imenom delovnega lista.
2. Če je aktivni delovni list prazen, se po pogovornem oknu, kot je prikazano spodaj, prikaže po kliku na OK gumb.

4. Zdaj je ustvarjeno novo Outlookovo e-poštno sporočilo in vidite, da je datoteka PDF navedena kot priloga v priloženi datoteki. Oglejte si posnetek zaslona:

5. Sestavite to e-poštno sporočilo in ga nato pošljite.
6. Ta koda je na voljo samo, če Outlook uporabljate kot poštni program.

Preprosto shranite delovni list ali več delovnih listov kot ločene datoteke PDF hkrati:

O Razdeljeni delovni zvezek uporabnost Kutools za Excel vam lahko pomaga enostavno shraniti delovni list ali več delovnih listov kot ločene datoteke PDF hkrati, kot je prikazano spodaj. Prenesite in preizkusite zdaj! (30-dnevna prosta pot)


Sorodni članki:


Najboljša orodja za pisarniško produktivnost

Kutools za Excel rešuje večino vaših težav in poveča vašo produktivnost za 80%

  • Ponovna uporaba: Hitro vstavite zapletene formule, grafikoni in vse, kar ste že uporabljali; Šifriraj celice z geslom; Ustvari poštni seznam in pošiljanje e-pošte ...
  • Vrstica Super Formula (enostavno urejanje več vrstic besedila in formule); Bralna postavitev (enostavno branje in urejanje velikega števila celic); Prilepite v filtrirani obseg...
  • Združi celice / vrstice / stolpce brez izgube podatkov; Vsebina razdeljenih celic; Združi podvojene vrstice / stolpce... prepreči podvojene celice; Primerjaj obsege...
  • Izberite Duplicate ali Unique Vrstice; Izberite prazne vrstice (vse celice so prazne); Super Find in Fuzzy Find v mnogih delovnih zvezkih; Naključna izbira ...
  • Natančna kopija Več celic brez spreminjanja sklica formule; Samodejno ustvarjanje referenc na več listov; Vstavi oznake, Potrditvena polja in še več ...
  • Izvleček besedila, Dodaj besedilo, Odstrani po položaju, Odstrani presledek; Ustvari in natisni vmesne seštevke strani Pretvarjanje med vsebino celic in komentarji...
  • Super filter (shranite in uporabite sheme filtrov za druge liste); Napredno razvrščanje glede na mesec / teden / dan, pogostost in drugo; Poseben filter s krepko, ležeče ...
  • Združite delovne zvezke in delovne liste; Spoji tabele na podlagi ključnih stolpcev; Razdelite podatke na več listov; Paketna pretvorba xls, xlsx in PDF...
  • Več kot 300 zmogljivih funkcij. Podpira Office / Excel 2007-2021 in 365. Podpira vse jezike. Enostavna uvedba v vašem podjetju ali organizaciji. 30-dnevna brezplačna preizkusna različica vseh funkcij. 60-dnevna garancija vračila denarja.
zavihek kte 201905

Kartica Office prinaša vmesnik z zavihki v Office in poenostavi vaše delo

  • Omogočite urejanje in branje z zavihki v Wordu, Excelu, PowerPointu, Publisher, Access, Visio in Project.
  • Odprite in ustvarite več dokumentov v novih zavihkih istega okna in ne v novih oknih.
  • Poveča vašo produktivnost za 50%in vsak dan zmanjša na stotine klikov miške za vas!
dno pisarniške mize
Komentarji (63)
Ocenjeno 5 iz 5 · 1 ocene
Ta komentar je moderator na spletnem mestu minimiziral
To mi odlično deluje, toda ali obstaja način za samodejno izbiro lokacije mape namesto ročne? Upam, da bom to naredil za 40 listov hkrati.
Ta komentar je moderator na spletnem mestu minimiziral
Upam tudi na odgovor na to vprašanje! Hvala za pomoč!
Ta komentar je moderator na spletnem mestu minimiziral
Poskušal sem prilepiti to v nov modul in dobim napako pri prevajanju: Sub ali Funkcija ni definirana. Prosim pomagajte.
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Darren,
Katero različico Officea uporabljate?
Ta komentar je moderator na spletnem mestu minimiziral
Urad 360
Ta komentar je moderator na spletnem mestu minimiziral
Ista težava
Ta komentar je moderator na spletnem mestu minimiziral
Kako naj uredim zgornji skript VBA, da doda datum in čas imenu datoteke, da ne prepiše že shranjenega?
Ta komentar je moderator na spletnem mestu minimiziral
Dragi Michael,
Za rešitev težave zaženite spodnjo kodo VBA.

Sub Saveaspdfandsend()
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng kot obseg
Dim xStr kot niz

Nastavite xSht = ActiveSheet
Nastavite xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)

Če je xFileDlg.Show = True, potem
xFolder = xFileDlg.SelectedItems(1)
Else
MsgBox "Določiti morate mapo, v katero želite shraniti PDF." & vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Morate navesti ciljno mapo"
Exit Sub
Konec Če
xStr = Oblika (Zdaj(), "llll-mm-dd-hh-mm-ss")
xFolder = xFolder + "\" + xSht.Name + "-" + xStr + ".pdf"

»Preveri, če datoteka že obstaja
Če je Len(Dir(xFolder)) > 0 Potem
xYesorNo = MsgBox(xFolder & " že obstaja." & vbCrLf & vbCrLf & "Ali ga želite prepisati?", _
vbYesNo + vbQuestion, "Datoteka obstaja")
On Error Resume Next
Če je xYesorNo = vbYes Potem
Ubij xFolder
Else
MsgBox "če ne prepišete obstoječega PDF-ja, ne morem nadaljevati." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Izhod iz makra"
Exit Sub
Konec Če
Če je Err.Number <> 0 Potem
MsgBox "Obstoječe datoteke ni mogoče izbrisati. Prepričajte se, da datoteka ni odprta ali zaščitena pred pisanjem." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Datoteke ni mogoče izbrisati"
Exit Sub
Konec Če
Konec Če

Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
'Shrani kot datoteko PDF
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xFolder, Kakovost:=xlQualityStandard

»Ustvarite Outlookovo e-pošto
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
Z xEmailObj
.Prikaz
.Do = ""
.CC = ""
.Subject = xSht.Name + "-" + xStr + ".pdf"
.Priloge.Dodaj xFolder
Če je DisplayEmail = False, potem
'.Pošlji
Konec Če
Končaj s
Else
MsgBox "Aktivni delovni list ne more biti prazen"
Exit Sub
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Crystal,

Res je super in mi odlično deluje. Potrebujem več pomoči za dodajanje:

1. v "Do" želim dati povezavo do določene celice aktivnega lista, kot je to v CC in v BCC želim dodati aktivno povezavo lista
2. v telesu e-pošte moram navesti nekaj standardnega besedila.

Zelo bom poln za vašo pomoč.

Hvala
odst
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Parag Somani,
Spodnja koda VBA vam lahko pomaga. Prosimo, spremenite polja .To, .CC, .BCC in .Body glede na vaše potrebe.

Sub Saveaspdfandsend()
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng kot obseg
Dim xStr kot niz

Nastavite xSht = ActiveSheet
Nastavite xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)

Če je xFileDlg.Show = True, potem
xFolder = xFileDlg.SelectedItems(1)
Else
MsgBox "Določiti morate mapo, v katero želite shraniti PDF." & vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Morate navesti ciljno mapo"
Exit Sub
Konec Če
xStr = Oblika (Zdaj(), "llll-mm-dd-hh-mm-ss")
xFolder = xFolder + "\" + xSht.Name + "-" + xStr + ".pdf"

»Preveri, če datoteka že obstaja
Če je Len(Dir(xFolder)) > 0 Potem
xYesorNo = MsgBox(xFolder & " že obstaja." & vbCrLf & vbCrLf & "Ali ga želite prepisati?", _
vbYesNo + vbQuestion, "Datoteka obstaja")
On Error Resume Next
Če je xYesorNo = vbYes Potem
Ubij xFolder
Else
MsgBox "če ne prepišete obstoječega PDF-ja, ne morem nadaljevati." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Izhod iz makra"
Exit Sub
Konec Če
Če je Err.Number <> 0 Potem
MsgBox "Obstoječe datoteke ni mogoče izbrisati. Prepričajte se, da datoteka ni odprta ali zaščitena pred pisanjem." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Datoteke ni mogoče izbrisati"
Exit Sub
Konec Če
Konec Če

Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
'Shrani kot datoteko PDF
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xFolder, Kakovost:=xlQualityStandard

»Ustvarite Outlookovo e-pošto
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
Z xEmailObj
.Prikaz
.To = Obseg("A8")
.CC = Obseg ("A9")
.BCC = Obseg ("A10")
.Subject = xSht.Name + "-" + xStr + ".pdf"
.Body = "Spoštovani " _
& vbNewLine & vbNewLine & _
"To je preizkusno e-pošto" & _
"pošiljanje v Excelu"
.Priloge.Dodaj xFolder
Če je DisplayEmail = False, potem
'.Pošlji
Konec Če
Končaj s
Else
MsgBox "Aktivni delovni list ne more biti prazen"
Exit Sub
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Poskušal sem uporabiti obseg za "Do", "CC", preprosto ne pobere vrednosti iz določene celice. Ali lahko prosim pomagate pri tem?
Hvala,
Mehul
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Crystal,

Res je super in mi odlično deluje. Potrebujem več pomoči za dodajanje:

1. v "Do" želim dati povezavo do določene celice aktivnega lista, kot je to v CC in v BCC želim dodati aktivno povezavo lista
2. v telesu e-pošte moram navesti nekaj standardnega besedila.

Zelo bom poln za vašo pomoč.

Hvala
odst
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Crystal,

Res je super in mi odlično deluje. Potrebujem več pomoči za dodajanje:

1. v "Do" želim dati povezavo do določene celice aktivnega lista, kot je to v CC in v BCC želim dodati aktivno povezavo lista
2. v telesu e-pošte moram navesti nekaj standardnega besedila.

Zelo bom poln za vašo pomoč.

Hvala
odst
Ta komentar je moderator na spletnem mestu minimiziral
Kako lahko dodam na primer list 2 iz delovnega zvezka kot pdf?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Armin,
Najprej morate odpreti list 2 v delovnem zvezku in nato zagnati kodo VBA z zgornjimi koraki, da jo spustite.
Ta komentar je moderator na spletnem mestu minimiziral
Kako naj uredim zgornji skript VBA, tako da se ime datoteke shrani kot posebna celica, izbrana na trenutnem listu, na primer celica A1?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Tom.
Pri tem žal ne morem pomagati.
Dobrodošli, da objavite kakršno koli vprašanje na našem forumu: https://www.extendoffice.com/forum.html
Dobili boste več podpore za Excel od strokovnjakov za Excel ali drugih oboževalcev Excela.
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, kako lahko shranim in pošljem pdf z imenom delovnega zvezka s trenutno kodo VBA? kaj naj uporabim namesto xSht.Name
Ta komentar je moderator na spletnem mestu minimiziral
Hi James,
Ali želite aktivni delovni list poslati kot pdf in ga poimenovati kot ime delovnega zvezka?
Ta komentar je moderator na spletnem mestu minimiziral
Hvala, deluje.
Ta komentar je moderator na spletnem mestu minimiziral
Kako lahko naredim, da izbriše shranjeni pdf, potem ko ga pošlje po e-pošti?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Jason,
Žal ti pri tem še ne morem pomagati. Ko ga pošljete po e-pošti, ga morate ročno izbrisati.
Ta komentar je moderator na spletnem mestu minimiziral
Zdravo,

Ali je mogoče najti ime za pdf iz celice? npr. Celica H4


In v celici H4 želim, da se zbira iz treh različnih celic. Ali je to možno?
Ta komentar je moderator na spletnem mestu minimiziral
To je možno. Naredite ločene spremenljivke za shranjevanje vrednosti iz celic in nato uporabite te spremenljivke pri nastavljanju xFolder.
Uporabil sem vrednost iz celice na svojem listu in današnji datum. Z lahkoto pa bi lahko naredili več vrednosti celic.

Tole sem dodal:
Dim xMemberName kot niz
Dim xFileDate kot niz

xMemberName = Obseg("H3").Vrednost
xFileDate = Format (zdaj, "mm-dd")

xFolder = xFolder + "\" xMemberName + xFileDate + ".pdf"
Ta komentar je moderator na spletnem mestu minimiziral
Ko to poskusim, dobim napako, kam v kodi naj to postavim?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Crystal,



Res je super in mi odlično deluje. Potrebujem več pomoči za dodajanje:

1. v "Body" želim dati povezavo do določene celice aktivnega lista. Nadalje Rad bi krepko označil besedilo.

Hvala

S spoštovanjem

Kishore kumar
Ta komentar je moderator na spletnem mestu minimiziral
Hi,

Ali mislite samodejno dodati vrednost celice v telo pošte in jo krepko označiti? Predpostavimo, da dodate vrednost C4 v telo pošte. Prosimo, uporabite spodnjo kodo.

Sub Saveaspdfandsend()

Dim xSht kot delovni list

Zatemni xFileDlg kot FileDialog

Zatemni xFolder kot niz

Dim xYesorNo kot celo število

Zatemni xOutlookObj kot objekt

Zatemni xEmailObj kot predmet

Dim xUsedRng kot obseg



Nastavite xSht = ActiveSheet

Nastavite xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)



Če je xFileDlg.Show = True, potem

xFolder = xFileDlg.SelectedItems(1)

Else

MsgBox "Določiti morate mapo, v katero želite shraniti PDF." & vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Morate navesti ciljno mapo"

Exit Sub

Konec Če

xFolder = xFolder + "\" + xSht.Name + ".pdf"



»Preveri, če datoteka že obstaja

Če je Len(Dir(xFolder)) > 0 Potem

xYesorNo = MsgBox(xFolder & " že obstaja." & vbCrLf & vbCrLf & "Ali ga želite prepisati?", _

vbYesNo + vbQuestion, "Datoteka obstaja")

On Error Resume Next

Če je xYesorNo = vbYes Potem

Ubij xFolder

Else

MsgBox "če ne prepišete obstoječega PDF-ja, ne morem nadaljevati." _

& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Izhod iz makra"

Exit Sub

Konec Če

Če je Err.Number <> 0 Potem

MsgBox "Obstoječe datoteke ni mogoče izbrisati. Prepričajte se, da datoteka ni odprta ali zaščitena pred pisanjem." _

& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Datoteke ni mogoče izbrisati"

Exit Sub

Konec Če

Konec Če



Nastavite xUsedRng = xSht.UsedRange

Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem

'Shrani kot datoteko PDF

xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xFolder, Kakovost:=xlQualityStandard



»Ustvarite Outlookovo e-pošto

Nastavite xOutlookObj = CreateObject("Outlook.Application")

Nastavi xEmailObj = xOutlookObj.CreateItem(0)

Z xEmailObj

.Prikaz

.Do = ""

.CC = ""

.Subject = xSht.Name + ".pdf"

.Priloge.Dodaj xFolder

.HTMLBody = "
" & Obseg("C4") & .HTMLBody

Če je DisplayEmail = False, potem

'.Pošlji

Konec Če

Končaj s

Else

MsgBox "Aktivni delovni list ne more biti prazen"

Exit Sub

Konec Če

End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Če bi želel, da se samodejno shrani v določeno mapo vsakič in vsakič (odpravlja potrebo, da uporabnik izbere mapo), kako bi to naredil?
npr. C: Računi/Severna Amerika/Stranke
Pomoč je zelo cenjena.
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Geoff,
Ali mislite shraniti delovni list kot datoteko pdf in shraniti v določeno mapo brez pošiljanja?
Ta komentar je moderator na spletnem mestu minimiziral
Mislim, da Geoff pomeni, da lahko določite določeno mapo v kodi, v katero se pdf shrani vsakič, namesto da bi morali lokacijo izbrati ročno. PDF se nato pošlje po e-pošti iz te določene mape.
Ta komentar je moderator na spletnem mestu minimiziral
Hvala Jeremy.
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Geoff, če želite samodejno shraniti datoteko pdf v določeno mapo, namesto da izberete lokacijo ročno, poskusite s spodnjo kodo. Ne pozabite spremeniti poti do mape v kodi.
Sub SaveAsPDFandSend()
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng kot obseg
Dim xPath kot niz
Nastavite xSht = ActiveSheet
xPath = "C:\Users\Win10x64Test\Desktop\delovni list v pdf" 'tukaj je "delovni list v pdf" ciljna mapa za shranjevanje datotek pdf
xFolder = xPath + "\" + xSht.Name + ".pdf"
Če je Len(Dir(xFolder)) > 0 Potem
xYesorNo = MsgBox(xFolder & " že obstaja." & vbCrLf & vbCrLf & "Ali ga želite prepisati?", _
vbYesNo + vbQuestion, "Datoteka obstaja")
On Error Resume Next
Če je xYesorNo = vbYes Potem
Ubij xFolder
Else
MsgBox "če ne prepišete obstoječega PDF-ja, ne morem nadaljevati." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Izhod iz makra"
Exit Sub
Konec Če
Če je Err.Number <> 0 Potem
MsgBox "Obstoječe datoteke ni mogoče izbrisati. Prepričajte se, da datoteka ni odprta ali zaščitena pred pisanjem." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Datoteke ni mogoče izbrisati"
Exit Sub
Konec Če
Konec Če

Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
'Shrani kot datoteko PDF
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xFolder, Kakovost:=xlQualityStandard

»Ustvarite Outlookovo e-pošto
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
Z xEmailObj
.Prikaz
.Do = ""
.CC = ""
.Subject = xSht.Name + ".pdf"
.Priloge.Dodaj xFolder
Če je DisplayEmail = False, potem
'.Pošlji
Konec Če
Končaj s
Else
MsgBox "Aktivni delovni list ne more biti prazen"
Exit Sub
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Ta koda deluje odlično, razen da želim, da je delovni list shranjen kot ime lista + datum (tj. Sheet1, 1. oktober 2020); na namizju uporabnika (to bo uporabljalo več ljudi in njihove poti se lahko nekoliko razlikujejo). Če je mogoče, želim v telo vstaviti tudi .jpg. JPG se nahaja znotraj delovnega lista (zunaj območja za tiskanje) in slika je shranjena na strežniku v skupni rabi.. čeprav se pot do strežnika razlikuje glede na uporabnik (za večino je pogon "T" za nekatere pogon "U")
se to da narediti? prosim in hvala ti milijonkrat.
Ta komentar je moderator na spletnem mestu minimiziral

Živjo, deluje odlično, hvala za delitev, potrebujem samo eno pomoč.
Če želim shraniti datoteko PDF s prilagojenim imenom (možnost vnosa imena datoteke v pogovorno okno Shrani kot), kot uporabnik uporabi to možnost v predlogi obrazca, kjer so obrazci shranjeni kot PDF z edinstvenim imenom .
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni, poskusite s spodnjo kodo VBA. Ko zaženete kodo, izberite mapo za shranjevanje datoteke PDF, nato pa se prikaže pogovorno okno, v katerem vnesete ime datoteke. Sub Saveaspdfandsend()
'Posodobil Extendoffice 20210209
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng kot obseg
Dim xStrName kot niz
Dim xV kot varianta

Nastavite xSht = ActiveSheet
Nastavite xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)

Če je xFileDlg.Show = True, potem
xFolder = xFileDlg.SelectedItems(1)
Else
MsgBox "Določiti morate mapo, v katero želite shraniti PDF." & vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Morate navesti ciljno mapo"
Exit Sub
Konec Če
xStrName = ""
xV = Application.InputBox("Vnesite ime datoteke:", "Kutools for Excel", , , , , , 2)
Če je xV = False Potem
Exit Sub
Konec Če
xStrName = xV
Če je xStrName = "" Potem
MsgBox ("Ni vnesenega imena datoteke, zapuščam postopek!")
Exit Sub
Konec Če

xFolder = xFolder + "\" + xStrName + ".pdf"
»Preveri, če datoteka že obstaja
Če je Len(Dir(xFolder)) > 0 Potem
xYesorNo = MsgBox(xFolder & " že obstaja." & vbCrLf & vbCrLf & "Ali ga želite prepisati?", _
vbYesNo + vbQuestion, "Datoteka obstaja")
On Error Resume Next
Če je xYesorNo = vbYes Potem
Ubij xFolder
Else
MsgBox "če ne prepišete obstoječega PDF-ja, ne morem nadaljevati." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Izhod iz makra"
Exit Sub
Konec Če
Če je Err.Number <> 0 Potem
MsgBox "Obstoječe datoteke ni mogoče izbrisati. Prepričajte se, da datoteka ni odprta ali zaščitena pred pisanjem." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Datoteke ni mogoče izbrisati"
Exit Sub
Konec Če
Konec Če

Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
'Shrani kot datoteko PDF
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xFolder, Kakovost:=xlQualityStandard

»Ustvarite Outlookovo e-pošto
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
Z xEmailObj
.Prikaz
.Do = ""
.CC = ""
.Subject = xSht.Name + ".pdf"
.Priloge.Dodaj xFolder
Če je DisplayEmail = False, potem
'.Pošlji
Konec Če
Končaj s
Else
MsgBox "Aktivni delovni list ne more biti prazen"
Exit Sub
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Hi,
Če imam v datoteki dva lista in bi želel zagnati ta makro na enem listu (s pritiskom na gumb), vendar poslati drugega, kako ga lahko dobim?
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni, to bi rad shranil na določeno lokacijo datoteke z imenom, ki temelji na vrednosti v celici C30. Preizkusil sem nekaj možnosti, vendar še naprej dobivam napake.
Ta komentar je moderator na spletnem mestu minimiziral
Živjo hein, spodnja koda bi morda lahko pomagala. Ko zaženete kodo, izberite določeno mapo, da shranite datoteko PDF, nato pa se prikaže pogovorno okno, v katerem vnesete ime datoteke. Sub Saveaspdfandsend()
'Posodobil Extendoffice 20210209
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng kot obseg
Dim xStrName kot niz
Dim xV kot varianta

Nastavite xSht = ActiveSheet
Nastavite xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)

Če je xFileDlg.Show = True, potem
xFolder = xFileDlg.SelectedItems(1)
Else
MsgBox "Določiti morate mapo, v katero želite shraniti PDF." & vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Morate navesti ciljno mapo"
Exit Sub
Konec Če
xStrName = ""
xV = Application.InputBox("Vnesite ime datoteke:", "Kutools for Excel", , , , , , 2)
Če je xV = False Potem
Exit Sub
Konec Če
xStrName = xV
Če je xStrName = "" Potem
MsgBox ("Ni vnesenega imena datoteke, zapuščam postopek!")
Exit Sub
Konec Če

xFolder = xFolder + "\" + xStrName + ".pdf"
»Preveri, če datoteka že obstaja
Če je Len(Dir(xFolder)) > 0 Potem
xYesorNo = MsgBox(xFolder & " že obstaja." & vbCrLf & vbCrLf & "Ali ga želite prepisati?", _
vbYesNo + vbQuestion, "Datoteka obstaja")
On Error Resume Next
Če je xYesorNo = vbYes Potem
Ubij xFolder
Else
MsgBox "če ne prepišete obstoječega PDF-ja, ne morem nadaljevati." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Izhod iz makra"
Exit Sub
Konec Če
Če je Err.Number <> 0 Potem
MsgBox "Obstoječe datoteke ni mogoče izbrisati. Prepričajte se, da datoteka ni odprta ali zaščitena pred pisanjem." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Datoteke ni mogoče izbrisati"
Exit Sub
Konec Če
Konec Če

Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
'Shrani kot datoteko PDF
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xFolder, Kakovost:=xlQualityStandard

»Ustvarite Outlookovo e-pošto
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
Z xEmailObj
.Prikaz
.Do = ""
.CC = ""
.Subject = xSht.Name + ".pdf"
.Priloge.Dodaj xFolder
Če je DisplayEmail = False, potem
'.Pošlji
Konec Če
Končaj s
Else
MsgBox "Aktivni delovni list ne more biti prazen"
Exit Sub
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Hvala za to, to je super, vendar želim, da se list poimenuje kot celica A1 na listu 1. mesto za shranjevanje kot A1 na listu 2, na primer C:\Users\peete\Dropbox\Screenshots, in e-pošto pošlji na e-poštni naslov na A3 listu 2, kar sem že izdelal.
Ta komentar je moderator na spletnem mestu minimiziral
Hvala za to, to je super, vendar želim, da se list poimenuje kot celica A1 na listu 1. mesto za shranjevanje kot A1 na listu 2, na primer C:\Users\peete\Dropbox\Screenshots, vendar se lahko spremeni, ko z uporabo datoteke in e-pošto pošljite na elektronski naslov na A3 listu 2, kar sem že izdelal.
Ta komentar je moderator na spletnem mestu minimiziral
Hi kristal , odlična koda, hvala za skupno rabo. Ali obstaja način, da izberete več listov (iz istega delovnega zvezka), da vsakega shranite kot neodvisen PDF in jih nato pošljete vse priložene v enem e-poštnem sporočilu?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, spodnja koda VBA vam lahko naredi uslugo, poskusite. V dvanajsti vrstici kode zamenjajte imena listov z dejanskimi imeni listov v vašem primeru.
Sub Saveaspdfandsend1()
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo, I, xNum kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng kot obseg
Dim xArrShetts kot varianta
Dim xPDFNameAddress kot niz
Dim xStr kot niz
xArrShetts = Array("test", "list1", "list2") 'Vnesite imena listov, ki jih boste poslali kot datoteke pdf, obdane z narekovaji, in jih ločite z vejico. Prepričajte se, da v imenu datoteke ni posebnih znakov, kot je \/:"*<>|.

Za I = 0 do UBound(xArrShetts)
On Error Resume Next
Nastavi xSht = Application.ActiveWorkbook.Worksheets(xArrShetts(I))
Če xSht.Name <> xArrShetts(I) Potem
MsgBox "Delovnega lista ni bilo mogoče najti, izhodna operacija:" & vbCrLf & vbCrLf & xArrShetts(I), vbInformation, "Kutools za Excel"
Exit Sub
Konec Če
Naslednji


Nastavite xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
Če je xFileDlg.Show = True, potem
xFolder = xFileDlg.SelectedItems(1)
Else
MsgBox "Določiti morate mapo, v katero želite shraniti PDF." & vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Morate navesti ciljno mapo"
Exit Sub
Konec Če
»Preveri, če datoteka že obstaja
xYesorNo = MsgBox("Če v ciljni mapi obstajajo datoteke z istim imenom, bo številska pripona samodejno dodana imenu datoteke, da se razlikujejo dvojniki" & vbCrLf & vbCrLf & "Kliknite Da za nadaljevanje, kliknite Ne za preklic", _
vbYesNo + vbQuestion, "Datoteka obstaja")
Če xYesorNo <> vbYes, potem zapustite sub
Za I = 0 do UBound(xArrShetts)
Nastavi xSht = Application.ActiveWorkbook.Worksheets(xArrShetts(I))

xStr = xFolder & "\" & xSht.Name & ".pdf"
xNum = 1
Medtem ko ni (Dir(xStr, vbDirectory) = vbNullString)
xStr = xFolder & "\" & xSht.Name & "_" & xNum & ".pdf"
xNum = xNum + 1
uporablja
Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xStr, Kakovost:=xlQualityStandard
Else

Konec Če
xArrShetts(I) = xStr
Naslednji

»Ustvarite Outlookovo e-pošto
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
Z xEmailObj
.Prikaz
.Do = ""
.CC = ""
.Subject = "????"
Za I = 0 do UBound(xArrShetts)
.Priloge.Dodaj xArrShetts(I)
Naslednji
Če je DisplayEmail = False, potem
'.Pošlji
Konec Če
Končaj s
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, ena sprememba, s katero se borim, je ustvariti ločeno e-pošto za vsak ustvarjen dokument pdf.
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, če želite ustvariti ločeno e-pošto za vsak dokument pdf, lahko ročno zaženete VBA, ki je na voljo v objavi, na različnih delovnih listih, da to storite.
Ta komentar je moderator na spletnem mestu minimiziral
V delovnem zvezku imam več kot 100 delovnih listov, kar pomeni, da moram VBA zagnati več kot 100-krat, kar je zamudno.  
Uspelo mi je razdeliti svoj delovni zvezek na več listov in nato lahko vsak delovni list pretvorim v posamezen dokument PDF.
Rešitev, ki jo iščem, je pošiljanje vsakega dokumenta PDF ločeno po e-pošti, medtem ko se zgornji postopek izvaja.
Tukaj trenutno uporabljam VBA:
Subshrani kotpdfandsend1()
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo, I, xNum kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng kot obseg
Dim xArrShetts kot varianta
Dim xPDFNameAddress kot niz
Dim xStr kot niz
xArrShetts = Array("02302257", "02400438", "02401829", "02403995", "02408001", "02409208", _
"02409980", "02411881", "02424178", "02430454", "02444046", "02448950", "02450600", _
"02459861", "02461750", "02467535", "02480484", "02484749", "02502041", "02504807", _
"02511843", "02515193", "02523098", "02523244", "02524036", "02524548", "02525516", "02525703", "02525898", "02528908", "02528950",
"02530381", "02531018", "02531252", "02531277", "02532571", "02533053", "02533474", _
"02534176", "02534592", "02534626", "02535343", "02536386", "02536921", "02537544", _
"02537607", "02538015", "02538755", "02538836", "02538910", "02539685", "02540063", "02540139", "02540158", "02541607", "02542344",
"02543763", "02543985", "02544116", "02544748", "02544762", "02545026", "02545048", _
"02545080", "02545447", "02545730", "02545814", "02546477", "02547458", "02547673", _
"02547833", "02547912", "02547950", "02547991", "02548848", "02549103", "02549116", "02549125", "02549132", "02549140", "02549182",
"02549462", "02549499", "02549565", "02549687", "02550049", "02550437", "02550812", _
"02550982", "02551004", "02551005", "02551045", "02552099", "02552222", "02552561", _
"02552684", "02552815", "02552892", "02553031", "02553186", "02553628", "02553721", "02555186", "02556934", "02557137", "02557393",
"02559121", "02559392", "02559419", "02559512", "02559802", "02559868", "02560052", _
"02560612", "02560684", "02560920", "02561018", "02561061", "02561092", "02561227", _
"02561349", "02561592", "02561630", "02561673", "02561880", "02562359", "02562920", "02562934", "02563013", "02563119", "02563133",
"02563445", "02563737", "02563828", "02563852", "02563861", "02563971", "02564042", _
"02564315", "02564366", "02564832", "02564909", "02565059", "02565205") 'Vnesite imena listov, ki jih boste poslali kot datoteke pdf, obdane z narekovaji, in jih ločite z vejico. Prepričajte se, da v imenu datoteke ni posebnih znakov, kot je \/:"*<>|.

Za I = 0 do UBound(xArrShetts)
On Error Resume Next
Nastavi xSht = Application.ActiveWorkbook.Worksheets(xArrShetts(I))
Če xSht.Name <> xArrShetts(I) Potem
MsgBox "Delovnega lista ni bilo mogoče najti, izhodna operacija:" & vbCrLf & vbCrLf & xArrShetts(I), vbInformation, "Kutools za Excel"
Exit Sub
Konec Če
Naslednji


Nastavite xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
Če je xFileDlg.Show = True, potem
xFolder = xFileDlg.SelectedItems(1)
Else
MsgBox "Določiti morate mapo, v katero želite shraniti PDF." & vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Morate navesti ciljno mapo"
Exit Sub
Konec Če
»Preveri, če datoteka že obstaja
xYesorNo = MsgBox("Če v ciljni mapi obstajajo datoteke z istim imenom, bo številska pripona samodejno dodana imenu datoteke, da se razlikujejo dvojniki" & vbCrLf & vbCrLf & "Kliknite Da za nadaljevanje, kliknite Ne za preklic", _
vbYesNo + vbQuestion, "Datoteka obstaja")
Če xYesorNo <> vbYes, potem zapustite sub
Za I = 0 do UBound(xArrShetts)
Nastavi xSht = Application.ActiveWorkbook.Worksheets(xArrShetts(I))

xStr = xFolder & "\" & xSht.Name & ".pdf"
xNum = 1
Medtem ko ni (Dir(xStr, vbDirectory) = vbNullString)
xStr = xFolder & "\" & xSht.Name & "_" & xNum & ".pdf"
xNum = xNum + 1
uporablja
Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xStr, Kakovost:=xlQualityStandard
Else

Konec Če
xArrShetts(I) = xStr
Naslednji

»Ustvarite Outlookovo e-pošto
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
Z xEmailObj
.Prikaz
.To = "Ctracklegal@ctrack.com"
.CC = ""
.Subject = "????"
Za I = 0 do UBound(xArrShetts)
On Error Resume Next
.Priloge.Dodaj xArrShetts(I)
Naslednji
Če je DisplayEmail = False, potem
.Pošlji
Exit Sub
Konec Če
Končaj s


End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Živjo @crystal
To je čudovito - ključna stvar, s katero se borim, je ime datoteke - rad bi, da se ime datoteke povleče iz celice na delovnem listu, namesto da bi uporabil ime zavihka. Kodo sem že uredil, da se samodejno shrani v določeno mapo, vendar imam težave z imenom datoteke.
Prosim za kakšno pomoč, ki jo lahko ponudite?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Tori, če želite datoteko PDF poimenovati z določeno vrednostjo celice, poskusite z naslednjo kodo. Ko zaženete kodo in izberete mapo za shranjevanje datoteke, se prikaže drugo pogovorno okno, izberite celico, ki jo boste uporabili vrednost kot ime datoteke PDF in nato kliknite V redu za dokončanje.
Sub Saveaspdfandsend2()
'Posodobil Extendoffice 20210521
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng, xRgInser kot obseg
Dim xB kot Boolean
Nastavite xSht = ActiveSheet
Nastavite xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)

Če je xFileDlg.Show = True, potem
xFolder = xFileDlg.SelectedItems(1)
Else
MsgBox "Določiti morate mapo, v katero želite shraniti PDF." & vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Morate navesti ciljno mapo"
Exit Sub
Konec Če
xB = res
On Error Resume Next
Medtem ko xB
Nastavite xRgInser = Nič
Nastavite xRgInser = Application.InputBox("Izberite celico, za katero boste uporabili vrednost za poimenovanje datoteke PDF:", "Kutools za Excel", , , , , , 8)
Če xRgInser ni nič potem
MsgBox " Nobena celica ni izbrana, zapustite operacijo! ", vbInformation, "Kutools za Excel"
Exit Sub
Konec Če
Če je xRgInser.Text = "" Potem
MsgBox " Izbrana celica je prazna, prosimo ponovno izberite!", vbInformation, "Kutools za Excel"
Else
xB = napačno
Konec Če
uporablja

xFolder = xFolder + "\" + xRgInser.Text + ".pdf"

»Preveri, če datoteka že obstaja
Če je Len(Dir(xFolder)) > 0 Potem
xYesorNo = MsgBox(xFolder & " že obstaja." & vbCrLf & vbCrLf & "Ali ga želite prepisati?", _
vbYesNo + vbQuestion, "Datoteka obstaja")
On Error Resume Next
Če je xYesorNo = vbYes Potem
Ubij xFolder
Else
MsgBox "če ne prepišete obstoječega PDF-ja, ne morem nadaljevati." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Izhod iz makra"
Exit Sub
Konec Če
Če je Err.Number <> 0 Potem
MsgBox "Obstoječe datoteke ni mogoče izbrisati. Prepričajte se, da datoteka ni odprta ali zaščitena pred pisanjem." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Datoteke ni mogoče izbrisati"
Exit Sub
Konec Če
Konec Če

Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
'Shrani kot datoteko PDF
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xFolder, Kakovost:=xlQualityStandard

»Ustvarite Outlookovo e-pošto
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
Z xEmailObj
.Prikaz
.Do = ""
.CC = ""
.Subject = xSht.Name + ".pdf"
.Priloge.Dodaj xFolder
Če je DisplayEmail = False, potem
'.Pošlji
Konec Če
Končaj s
Else
MsgBox "Aktivni delovni list ne more biti prazen"
Exit Sub
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, potreboval sem nekaj podobnega, tako da sem dobil tole. Potrebuje trenutni datum in ustvari novo mapo z imenom datuma na določeni lokaciji. Postavi pdf na to novo lokacijo, nato pa pdf priloži v novo e-pošto. Deluje kot poslastica. Sem šele začetnik, zato mi oprostite, če je videti kot nered. :D
PodPDFTOEMAIL()
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng kot obseg
Dim xPath kot niz
Zatemni xOutMsg kot niz
Dim sFolderName kot niz, sFolder kot niz
Dim sFolderPath kot niz

Nastavite xSht = ActiveSheet
xFileDate = Format (zdaj, "dd-mm-llll")
sFolder = "C:" 'tukaj imate glavno mapo
sFolderName = "Konec tedna " + Format(Zdaj, "dd-mm-llll") 'mapa, ki bo ustvarjena v glavni mapi z imenom Konec tedna in trenutnim datumom
sFolderPath = "C:" & sFolderName 'glavna mapa znova, da ustvarite novo pot, vključno z novo mapo
Nastavi oFSO = CreateObject("Scripting.FileSystemObject")
Če oFSO.FolderExists(sFolderPath) Potem
MsgBox "Mapa že obstaja!" & vbCrLf & vbCrLf & sFolderPath, vbInformation, "INFO"
Else
MkDir sFolderPath
MsgBox "Nova mapa je bila ustvarjena!" & vbCrLf & vbCrLf & sFolderPath, vbInformation, "INFO"
Konec Če
xPath = sFolderPath
xFolder = xPath + "\" + xSht.Name + "_" + xFileDate + ".pdf"
Če je Len(Dir(xFolder)) > 0 Potem
xYesorNo = MsgBox(xFolder & " že obstaja." & vbCrLf & vbCrLf & "Ali ga želite prepisati?", _
vbYesNo + vbQuestion, "Datoteka obstaja")
On Error Resume Next
Če je xYesorNo = vbYes Potem
Ubij xFolder
Else
MsgBox "če ne prepišete obstoječega PDF-ja, ne morem nadaljevati." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Izhod iz makra"
Exit Sub
Konec Če
Če je Err.Number <> 0 Potem
MsgBox "Obstoječe datoteke ni mogoče izbrisati. Prepričajte se, da datoteka ni odprta ali zaščitena pred pisanjem." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Datoteke ni mogoče izbrisati"
Exit Sub
Konec Če
Konec Če

Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xFolder, Kakovost:=xlQualityStandard
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
xOutMsg = " Najdite priloženo To e-pošto in priloga sta bila ustvarjena samodejno "
'doda opombo, da je bilo e-poštno sporočilo ustvarjeno samodejno

Z xEmailObj
.Prikaz
.To = "" 'dodajte svojo e-pošto
.CC = ""
.Subject = xSht.Name + " PDF za konec tedna " + xFileDate + " - Lokacija " ' zadeva vključuje ime lista, pdf, datum in lokacijo, to je mogoče po potrebi urediti
.Priloge.Dodaj xFolder
.HTMLBody = xOutMsg & .HTMLBody
Če je DisplayEmail = False, potem
'.Pošlji <--- Če izbrišete apostrof, bo e-poštno sporočilo poslano samodejno, zato bodite previdni
Konec Če
Končaj s
Else
MsgBox "Aktivni delovni list ne more biti prazen"
Exit Sub
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Kako uredim to kodo, da shranim samo celice ("a1:r99"), da jih shranim kot PDF. Imam dodatne stvari na straneh, ki jih ne želim v svojem dokumentu PDF.
Sub Saveaspdfandsend()
'Posodobil Extendoffice 20210209
Dim xSht kot delovni list
Zatemni xFileDlg kot FileDialog
Zatemni xFolder kot niz
Dim xYesorNo kot celo število
Zatemni xOutlookObj kot objekt
Zatemni xEmailObj kot predmet
Dim xUsedRng kot obseg
Dim xStrName kot niz
Dim xV kot varianta

Nastavite xSht = ActiveSheet
Nastavite xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)

Če je xFileDlg.Show = True, potem
xFolder = xFileDlg.SelectedItems(1)
Else
MsgBox "Določiti morate mapo, v katero želite shraniti PDF." & vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Morate navesti ciljno mapo"
Exit Sub
Konec Če
xStrName = ""
xV = Application.InputBox("Vnesite ime datoteke:", "Kutools for Excel", , , , , , 2)
Če je xV = False Potem
Exit Sub
Konec Če
xStrName = xV
Če je xStrName = "" Potem
MsgBox ("Ni vnesenega imena datoteke, zapuščam postopek!")
Exit Sub
Konec Če

xFolder = xFolder + "\" + xStrName + ".pdf"
»Preveri, če datoteka že obstaja
Če je Len(Dir(xFolder)) > 0 Potem
xYesorNo = MsgBox(xFolder & " že obstaja." & vbCrLf & vbCrLf & "Ali ga želite prepisati?", _
vbYesNo + vbQuestion, "Datoteka obstaja")
On Error Resume Next
Če je xYesorNo = vbYes Potem
Ubij xFolder
Else
MsgBox "če ne prepišete obstoječega PDF-ja, ne morem nadaljevati." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Izhod iz makra"
Exit Sub
Konec Če
Če je Err.Number <> 0 Potem
MsgBox "Obstoječe datoteke ni mogoče izbrisati. Prepričajte se, da datoteka ni odprta ali zaščitena pred pisanjem." _
& vbCrLf & vbCrLf & "Pritisnite OK za izhod iz tega makra.", vbCritical, "Datoteke ni mogoče izbrisati"
Exit Sub
Konec Če
Konec Če

Nastavite xUsedRng = xSht.UsedRange
Če Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0, potem
'Shrani kot datoteko PDF
xSht.ExportAsFixedFormat Vrsta:=xlTypePDF, Ime datoteke:=xFolder, Kakovost:=xlQualityStandard

»Ustvarite Outlookovo e-pošto
Nastavite xOutlookObj = CreateObject("Outlook.Application")
Nastavi xEmailObj = xOutlookObj.CreateItem(0)
Z xEmailObj
.Prikaz
.Do = ""
.CC = ""
.Subject = xSht.Name + ".pdf"
.Priloge.Dodaj xFolder
Če je DisplayEmail = False, potem
'.Pošlji
Konec Če
Končaj s
Else
MsgBox "Aktivni delovni list ne more biti prazen"
Exit Sub
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni, pravkar sem preizkusil to kodo na enem od svojih delovnih listov in imam nastavljena območja tiskanja, tako da se dodatne stvari na dnu niso pojavile v pdf-ju. Poskusi!
Ta komentar je moderator na spletnem mestu minimiziral
Hi
Najlepša hvala za kodo, toda ali je mogoče PDF samodejno shraniti na isto mesto kot aktivna Excelova datoteka in z istim imenom datoteke kot aktivna Excelova datoteka?
Najlepša hvala.
Rod
Tu še ni objavljenih komentarjev
Obremenitev Več
Pustite vaše komentarje
Objava kot gost
×
Ocenite to objavo:
0   Znaki
Predlagane lokacije

Sledi nam

Copyright © 2009 - www.extendoffice.com. | Vse pravice pridržane. Poganja ga ExtendOffice. | Kazalo
Microsoft in logotip Office sta blagovni znamki ali registrirani blagovni znamki družbe Microsoft Corporation v ZDA in / ali drugih državah.
Zaščiteno s Sectigo SSL