Avatar billede micaud Mester
17. april 2007 - 10:28 Der er 22 kommentarer og
1 løsning

Pdf og mail regneark via vb

Jeg har to kode stumper. En der mail mit regneark rundt og et der gemmer regneark som PDF. Hvordan kombinere jeg dem, således at regnearket først gemmes som PDF og mails rundt i samme VB kode i excel - er det muligt ??

Kode 1 - mail excelark rundt:

FilNavn = ThisWorkbook.Name
'Undersøg om mailsystem til stede
If Application.MailSystem <> xlNoMailSystem Then
   
    '    MsgBox "Du har valgt at maile salgstallene rundt. Du skal derfor svare ja næste gang for at tillade Outlook at sende salgstallene.", vbInformation, "Postmeddelelse"
    Worksheets("Butikker").Shapes("cmdUpdateText").Visible = False
    Workbooks(FilNavn).Worksheets("Data").Range("e8") = Now
    Workbooks(FilNavn).Worksheets("Data").Range("f8") = "af " & Application.UserName
    ActiveWorkbook.Save
   
    Sheets("Data").Visible = False
    Sheets("Pivot").Visible = False
    Sheets("Pivot sidste år").Visible = False

    Sheets("Butikker").Shapes("Button 300").Delete
    Sheets("Butikker").Shapes("Button 299").Delete
    ActiveSheet.Shapes("cmdUpdatetext").Delete
    Rows("54:70").EntireRow.Hidden = True

On Error GoTo Errorhandler
    With ActiveWorkbook
        .SendMail _
        Recipients:=Workbooks(FilNavn).Worksheets("Data").Range("c9:c21"), _
        Subject:=Range("A66").Value
        .Close SaveChanges:=False
  End With
  Application.MailLogoff
    Sheets(Array("Butikker", "Salgstal-graf")).Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Exit Sub

Errorhandler:
    MsgBox "Du svarede NEJ til at maile salgstal rundt. Genåben hvis du vil maile senere.", vbInformation, "Postmeddelelse"
    ActiveWindow.Close SaveChanges:=False
    Application.CutCopyMode = False

  Else
    MsgBox "Mailprogrammet er ikke tilgængelig. Salgstal bliver derfor ikke mailet rundt. Prøv igen senere!", vbInformation, "Postmeddelelse"
    ActiveWindow.Close SaveChanges:=False
    Application.CutCopyMode = False
  End If


Kode2 - Gem som PDF:

Public Sub PrinttoPDF()
    Dim objDistiller As Object
    Dim strADB_FileName As String
    Dim strPSFileName As String
    Dim strFileName As String
    Dim logFileName As String

    Set objDistiller = CreateObject("Pdfdistiller.PdfDistiller")

    Application.ActivePrinter = "Adobe PDF på Ne01:"
    strFileName = c:\salgstal
    logFileName = strFileName1 & ".log"
    strPSFileName = strFileName & ".ps"
    strADB_FileName = strFileName & ".pdf"
   
    'create postscript file
'    Options.PrintBackground = False
    ActiveWindow.SelectedSheets.PrintOut copies:=1, printtofile:=True, prtofilename:=strPSFileName

    'convert postscript file to pdf
    objDistiller.FileToPDF strPSFileName, strADB_FileName, ""

    'delete postscript file
    Kill strPSFileName
    Kill logFileName
'    objDistiller.Quit
    Set objDistiller = Nothing
End Sub
Avatar billede splokit Nybegynder
17. april 2007 - 10:44 #1
hvis de to koder virker skal du bare skrive navnet på koden over "End sub" i kode 1

PrinttoPDF
End Sub

Eller.

Call PrinttoPDF
End Sub
Avatar billede micaud Mester
17. april 2007 - 10:53 #2
Hvis jeg gør det, så ender det jo stadig med at jeg sender selve excel arket via mail og derefter gemmer én side i PDF-format.

Det er meningen, at jeg skal maile pdf-filen og ikke excel-filen, som jeg gør nu!!!

I øvrigt indeholder regnearket 5 ark, hvor kun de 2 første skal laves til PDF og mailes!!
Avatar billede splokit Nybegynder
17. april 2007 - 10:55 #3
ok...

så skal du have en anden kode til at sende med... så den vedhæfter den fil som du lige har lavet...

finder lige noget..
Avatar billede splokit Nybegynder
17. april 2007 - 11:15 #4
Har ikke testede den men det er noget som den her du skal bruge.
Det er til MS Outlook,

Sub SendEMail()
  Dim Email As String, Subj As String
  Dim MSG As String, URL As String
  Dim r As Integer, x As Double
  'data in rows 2-4 Rem Get the email address
      Email = "Bruger@domæne.dk"
      bygMail r
End Sub
Private Sub bygMail(r)
  Dim mailThis As Outlook.MailItem
  Dim MSG As String
  Dim Email As String
  Dim Subj As String
  Dim Disk As String, Filtype As String
  Dim x As Long
  Disk = "c:\salgstal\"
  ChDir Disk
  Filtype = ".pdf"
  Filnavn = "Din pdf"
  Set mailThis = CreateItem(olMailItem)
  Email = Cells(r, 30)
  Subj = Cells(1, 66)
 
  MSG = ""
    mailThis.Attachments.Add Disk & Filnavn & Filtype
  mailThis.Recipients.Add Email
  mailThis.Subject = Subj
  mailThis.Body = MSG
'  mailThis.Send
'  mailThis.Save
  mailThis.Display

End Sub
Avatar billede splokit Nybegynder
17. april 2007 - 11:18 #5
Du kan få nogle ider her fra...

http://www.rondebruin.nl/sendmail.htm
Avatar billede word-hajen Nybegynder
17. april 2007 - 16:15 #6
Lav min PrinttoPDF-procedure om til en funktion, der returnerer filnavnet (som jo er den fulde sti og navn) på din nu genererede pdf-fil. Denne kan du så vedhæfte en mail direkte uden at bruge ChDir - men du skal have fat i Outlook direkte i stedet for at bruge Excel til at skabe mailen.
Avatar billede micaud Mester
17. april 2007 - 18:24 #7
Word-haj - det skal jeg nok bruge et eksempel på !!! Betyder det, at jeg skal lave en normal mail og vedhæfte filen hvergang eller hvordan gøres det smart.

splokit - jeg forsøger dit senere i aften.
Avatar billede word-hajen Nybegynder
17. april 2007 - 22:41 #8
Du kan sagtens gøre det fra Excel, du skal så "bare" smide Outlook i luften i din Excel-kode. Her kan du så bruge noget af den kode, som splokit så venligt har leveret, men i stedet for at skifte folder og strikke filnavnet sammen og bruge det i mailThis.Attachments.Add, bruger du filnavnet fra funktionen med konverteringen til pdf.
Avatar billede micaud Mester
17. april 2007 - 22:43 #9
Ja det er jo fint nok. Gider du strikke det lidt sammen for mig ud fra de 2 koder jeg bruger nu, for jeg er ikke helt med på din idé.
Avatar billede word-hajen Nybegynder
17. april 2007 - 22:57 #10
Omdan pdf-proceduren til en funktion, som giver dig filnavnet tilbage:

Public Function PrinttoPDF() as string
    Dim objDistiller As Object
    Dim strADB_FileName As String
    Dim strPSFileName As String
    Dim strFileName As String
    Dim logFileName As String

    Set objDistiller = CreateObject("Pdfdistiller.PdfDistiller")

    Application.ActivePrinter = "Adobe PDF på Ne01:"
    strFileName = c:\salgstal
    logFileName = strFileName1 & ".log"
    strPSFileName = strFileName & ".ps"
    strADB_FileName = strFileName & ".pdf"
   
    'create postscript file
'    Options.PrintBackground = False
    ActiveWindow.SelectedSheets.PrintOut copies:=1, printtofile:=True, prtofilename:=strPSFileName

    'convert postscript file to pdf
    objDistiller.FileToPDF strPSFileName, strADB_FileName, ""

    'delete postscript file
    Kill strPSFileName
    Kill logFileName

    PrinttoPDF = strADB_FileName

    Set objDistiller = Nothing
End Function

*****fra kode leveret af splokit****
mailThis.Attachments.Add PrinttoPDF
*****fra kode leveret af splokit****
Avatar billede micaud Mester
17. april 2007 - 23:26 #11
Har jeg forsået det ret, at jeg kun skal bruge den ene linie fra splokit? (ved godt, at jeg kan indsætte modtager mv.)

Jeg kører denne sub:
Sub test1()
mailThis.Attachments.Add PrinttoPDF

End Sub

Hvorefter den siger file not found. Det er som om, at den ikke ved, hvor filen er gemt.
Avatar billede word-hajen Nybegynder
18. april 2007 - 09:32 #12
Nej, du kan ikke nøjes med at bruge den ene linje fra splokit. Du er nødt til at have en reference til outlook, modtager af mailen osv. også.

Jeg vil foreslå, at du laver en streng-variabel:

strPDFFilename = PrinttoPDF

Når du har lavet printpdf-proceduren om til en funktion, vil den returnere filnavnet, som så "opbevares" i strPDFFilename. Dette kan du så sætte bag ...Add i stedet for at sætte PrinttoPDF der direkte. Så har du også mulighed for at tjekke, om du rent faktisk har fået returneret filnavnet, inden du går videre og forsøger at vedhæfte filen på en mail.

(ps! er først retur ved pc'en lørdag)
Avatar billede micaud Mester
18. april 2007 - 09:55 #13
Det virker ikke. Jeg har følgende 3 koder:

Sub SendEMail()
  Dim Email As String, Subj As String
  Dim MSG As String, URL As String
  Dim r As Integer, x As Double
  'data in rows 2-4 Rem Get the email address
      Email = "user@domæne.dk"
      bygMail r
End Sub

Private Sub bygMail(r)
  Dim mailThis As Outlook.MailItem
  Dim MSG As String
  Dim Email As String
  Dim Subj As String
  Dim Disk As String, Filtype As String
  Dim x As Long
'  Disk = "c:\"
'  ChDir Disk
'  Filtype = ".pdf"
'  Filnavn = "salgstal"
  Set mailThis = CreateItem(olMailItem)
  Email = "user@domæne.dk"
  Subj = "Test"
 
  MSG = ""
'    mailThis.Attachments.Add Disk & Filnavn & Filtype
  mailThis.DisplaymailThis.Attachments.Add PrinttoPDF
  mailThis.Recipients.Add Email
  mailThis.Subject = Subj
  mailThis.Body = MSG
'  mailThis.Send
'  mailThis.Save
  mailThis.Display

End Sub

Public Function PrinttoPDF() As String
    Dim objDistiller As Object
    Dim strADB_FileName As String
    Dim strPSFileName As String
    Dim strFileName As String
    Dim logFileName As String

    Set objDistiller = CreateObject("Pdfdistiller.PdfDistiller")

    Application.ActivePrinter = "Adobe PDF på Ne01:"
    strFileName = "c:\salgstal"
    logFileName = strFileName1 & ".log"
    strPSFileName = strFileName & ".ps"
    strADB_FileName = strFileName & ".pdf"
   
    'create postscript file
'    Options.PrintBackground = False
    ActiveWindow.SelectedSheets.PrintOut copies:=1, printtofile:=True, prtofilename:=strPSFileName

    'convert postscript file to pdf
    objDistiller.FileToPDF strPSFileName, strADB_FileName, ""

    'delete postscript file
    Kill strPSFileName
'    Kill logFileName

    PrinttoPDF = strADB_FileName

    Set objDistiller = Nothing
End Function

Den fejlmelder ved
  Dim mailThis As Outlook.MailItem
med "user-defined type not defined"
Avatar billede splokit Nybegynder
18. april 2007 - 11:11 #14
Hvor fra får du mail adressen!?

som jeg har forstået det.. skal excel laves om til pdf og mailes...

Først skal koden "PrinttoPDF" lave excel om til pdf og det navn den ellers før skal mail koden så have for at kunne finde den fil.

hvorfra har den mail adressen fra!?

ps reference.
Alt+11 / Tools / Reference...
'Microsoft Outlook 10.0 Object Library el "11.0" hvad du nu har..
Avatar billede splokit Nybegynder
18. april 2007 - 11:11 #15
får
Avatar billede micaud Mester
18. april 2007 - 15:20 #16
Mhh den var ikke slået til, så nu stopper den ved

  mailThis.DisplaymailThis.Attachments.Add PrinttoPDF

men bruger jeg din (splokit) så virker det fint

    mailThis.Attachments.Add Disk & Filnavn & Filtype

dog skal jeg både give adgang 1 minut og sige ja til at mail, hvor jeg fra min gamle mail kode kun skulle sige ja til at maile.

Er det muligt at få den til det uden at skulle svare ja ??
Avatar billede splokit Nybegynder
19. april 2007 - 10:06 #17
Du kan undgå denne ved at lave VBA kode op imod redemption biblioteket. Du skal blot følge instruktionerne på

http://www.officekonsulenterne.dk/help/redemption.aspx
Avatar billede micaud Mester
19. april 2007 - 10:14 #18
Spændende, men den melder fejl på det link. Den laver den op til:

http://www.officekonsulenterne.dk/?aspxerrorpath=/help/redemption.aspx

så jeg får kun hovedsiden, kan du kopi/paste hertil eventuelt....?
Avatar billede splokit Nybegynder
19. april 2007 - 10:53 #19
Avatar billede micaud Mester
19. april 2007 - 12:55 #20
Det ser noget langhåret ud, men tusind tak for hjælpen. Send et svar.
Avatar billede splokit Nybegynder
19. april 2007 - 13:30 #21
:)
Avatar billede kedde65 Praktikant
20. april 2007 - 09:20 #22
Så skulle http://www.officekonsulenterne.dk/help/redemption.aspx virke igen ;)

/Christian
ck@officekonsulenterne.dk
Avatar billede splokit Nybegynder
20. april 2007 - 10:36 #23
Tak.. :)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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