Save/Mail in specifiek format

Status
Niet open voor verdere reacties.

martijnsw

Gebruiker
Lid geworden
7 nov 2006
Berichten
52
Hallo,

Kom er net achter dat ik deze vraag in een verkeerd deel van het forum heb geplaatst.
Vandaar dat ik hem hier nogmaals plaats. Hopelijk heeft er iemand een antwoord op ;-)

Onderstaande code gebruik ik om een excel bestand op te slaan als een comma gescheiden txt bestand


Code:
ActiveWorkbook.SaveAs Filename:=Pad & "\INTERFACE_FILE_LTC_SO_" & Format(Date, "_yyyymmdd_") & Format(Time, "hh.mm.ss") & ".txt ", FileFormat:=xlCSV, CreateBackup:=False

Wat ik nu wil is het opgeslagen bestand automatish mailen naar een fixed mail adres met een fixed subject.

Ik zit zelf een beetje te rommelen om onderstaande sub er tussen te proppen echter lukt het mij niet om de actieve sheet te versturen als een csv.txt bestand.


Code:
Sub zenden()

ThisWorkbook.SendMail “blablabl@blablabl.nl”, "Fixed subject txt"

MsgBox "txt bestand is verstuurd. Controleer in de Verzonden Items of het verzenden gelukt is.", vbInformation, "Sheet verzonden"

End Sub

iemand een idee hoe ik dit makkelijk ertussen krijg?

alvast bedankt,
 
Alles over sendmail vind je hier.

HTML:
http://msdn.microsoft.com/en-us/library/ff458119(office.11).aspx


Prachtig alleen net een tikie te hoog gegrepen voor me.
Er staat gewoon te veel info waar ik niet uit kom.

Het enige wat ik wil is mijn excel sheet opslaan als een csv file met de extensie .txt. ( Dit lukt me wel )
En dan het opgeslagen bestand ( dus het .txt bestand ) welke een variabele naam heeft binnen dezelfde macro mailen naar een fixed mail adres en met een fixed subject.

Ik weet niet hoe ik in VBA duidelijk maak dat ik het bestand wat ik zojuist heb opgeslagen ook nog wil mailen!
 
Ik kom niet verder dan onderstaande.
Echter stuurt hij nu niet het net gesaved bestand maar het workbook waar deze code in staat.
Ik wil enkel het bestand mailen welke in de code een regel eerder is opgeslagen.


Code:
    Sheets("TOTAAL").Select
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="AAAAAAA", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Application.DisplayAlerts = False
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs Filename:=Pad & "\INTERFACE_FILE_LTC_SO_" & Format(Date, "_yyyymmdd_") & Format(Time, "hh.mm.ss") & ".txt ", FileFormat:=xlCSV, CreateBackup:=False
    ''''''''''''''''''''''''''''''''''''''''''
    ThisWorkbook.SendMail "Email@blabl.com", "Subject text"
 
Kun je niet gewoon de sheet opslaan als .csv en het dan via e-mail laten verzenden?

Dan zou je bij het openen van het workbook een macro kunnen laten nagaan of het een .csv of een .xls betreft. In het geval van .csv wordt het dan meteen verzonden.
 
Kun je niet gewoon de sheet opslaan als .csv en het dan via e-mail laten verzenden?

Dan zou je bij het openen van het workbook een macro kunnen laten nagaan of het een .csv of een .xls betreft. In het geval van .csv wordt het dan meteen verzonden.

De sheet is een tool.

Deze tool is juist bedoeld om excel bestanden (welke door een andere partij naar ons bedrijf worden gestuurd in een afgesproken layout) om te zetten naar een csv format en als txt bestand op te slaan.

Het opslaan is nodig omdat deze later als referentie materiaal dienen.

Verder zou ik nu graag dezelfde macro het opgeslagen bestand automatisch willen laten mailen naar de interface van onze applicatie.
Deze accepteerd enkel txt bestanden gescheiden door commas.

Het mailen gebeurd nu nog manueel waar ik dus liever van af wil.
 
Het is ook mogelijk om een enkel werkblad op te slaan (als .csv).

Maar ik bedenk me nu dat een tekstbestand nooit een VBA-macro kan bevatten. Denkfoutje.
 
Je wil dus een werkblad als CSV versturen via mail.
Nu de code van Ron de Bruin alleen met een kleine verandering namelijk ipv xls nu csv.

Code:
Sub Mail_ActiveSheet()
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim Sourcewb As Workbook
    Dim Destwb As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String
    Dim OutApp As Object
    Dim OutMail As Object

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    Set Sourcewb = ActiveWorkbook

    ' Next, copy the sheet to a new workbook.
    ' You can also use the following line, instead of using the ActiveSheet object,
   ' if you know the name of the sheet you want to mail :
    ' Sheets("Sheet5").Copy
    ActiveSheet.Copy
    Set Destwb = ActiveWorkbook

    FileExtStr = ".csv": FileFormatNum = -4143

    ' You can use the following statements to change all cells in the
   ' worksheet to values.
    '    With Destwb.Sheets(1).UsedRange
    '        .Cells.Copy
    '        .Cells.PasteSpecial xlPasteValues
    '        .Cells(1).Select
    '    End With
    '    Application.CutCopyMode = False

    ' Save the new workbook, mail, and then delete it.
    TempFilePath = Environ$("temp") & "\"
    TempFileName = "Part of " & Sourcewb.Name & " " _
                 & Format(Now, "dd-mmm-yy h-mm-ss")

    Set OutApp = CreateObject("Outlook.Application")
    
    Set OutMail = OutApp.CreateItem(0)

    With Destwb
        .SaveAs TempFilePath & TempFileName & FileExtStr, _
                FileFormat:=FileFormatNum
        On Error Resume Next
       ' Change the mail address and subject in the macro before
       ' running the procedure.
        With OutMail
            .To = "ron@debruin.nl"
            .CC = ""
            .BCC = ""
            .Subject = "This is the Subject line"
            .Body = "Hello World!"
            .Attachments.Add Destwb.FullName
            ' You can add other files by uncommenting the following statement.
            '.Attachments.Add ("C:\test.txt")
            ' In place of the following statement, you can use ".Display" to
            ' display the mail.
            .Send
        End With
        On Error GoTo 0
        .Close SaveChanges:=False
    End With

    ' Delete the file after sending.
    Kill TempFilePath & TempFileName & FileExtStr

    Set OutMail = Nothing
    Set OutApp = Nothing

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub

Gr,
Alex,
 
Ik ben nog niet lang bezig in VBA dus de code van mr de bruin is nog wat ingewikkeld voor me :confused:

Ik hoopte op een oplossing binnen mijn code die ik gepost had.

Het is geloof ik ook nog niet helemaal duidelijk wat ik nu precies bedoel.

Met de code hieronder sla ik mijn sheet op in het gewenste format ( CSV ) en met de extensie txt. tevens geef ik er een naam aan waarvan het eerste deel fixed moet zijn.
De rest is een datum/tijd.

Code:
 ActiveWorkbook.SaveAs Filename:=Pad & "\INTERFACE_FILE_LTC_SO_" & Format(Date, "_yyyymmdd_") & Format(Time, "hh.mm.ss") & ".txt ", FileFormat:=xlCSV, 
CreateBackup:=False

Nu moet het bestand wat ik net heb opgeslagen ( het txt bestand INTERFACE_FILE_LTC_SO_YYYYMMDDHHMMSS.txt) mailen.

Nu weet ik dat ik een bestand kan oproepen/ophalen door een naam in te geven.
Echter door de tijd en datum die ik meegeef aan het txt file is deze dus altijd variabel.
Mischien is er een manier om altijd het laatst opgeslagen bestand op te halen?

Het is dan hoe dan ook altijd het laatst opgeslagen bestand in de map omdat de tool hem zelf opslaat.

Of mischien kan ik de macro laten onthouden wat de bestands naam of file was en deze laten mailen.

Het txt bestand wordt ten alle tijden in dezelfde map opgeslagen als waar de tool staat.
Dit is geen fixed locatie op een schijf.
 
Nou na lang geknutsel en wat hulp van jullie ben ik uiteindelijk toch tot een werkend resultaat gekomen.:thumb::o

Hieronder mijn Code.

Code:
Sub Sendmymail()

Dim Sourcewb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim OutApp As Object
Dim OutMail As Object

    Pad = ActiveWorkbook.Path
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    
    Set Sourcewb = ActiveWorkbook
    '''''''''''''''''''''''''''''''''''''''''''''''''
    Sheets("TOTAAL").Select
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="AAAAAAA", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Application.DisplayAlerts = False
    Application.CutCopyMode = False
    
    '''''''''''''''''''''''''''''''''''''''''''''''''
    ActiveSheet.Copy
    
    Set Destwb = ActiveWorkbook
           
   TempFilePath = Pad & "\"
   TempFileName = "INTERFACE_FILE_LTC_SO_" & Format(Date, "_yyyymmdd_") & Format(Time, "hh.mm.ss") & ".txt"
        
    Set OutApp = CreateObject("outlook.application")
    Set OutMail = OutApp.CreateItem(0)
    
    With Destwb
        .SaveAs TempFilePath & TempFileName, _
            FileFormat:=xlCSV
        On Error Resume Next
        With OutMail
            .To = "email@adres.nl"
            .CC = ""
            .BCC = ""
            .Subject = "blablablablabla"
            .Body = ""
            .Attachments.Add Destwb.FullName
            .Send
        End With
        On Error GoTo 0
        .Close SaveChanges:=False
    End With
    
   
    Set OutMail = Nothing
    Set OutApp = Nothing
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    
     Windows("LTC INTERFACE TOOL.xls").Activate
    
End Sub

Maar zoals gewoonlijk komt er na elke oplossing een nieuwe vraag :D.

Hoe kom je van de beveiligings melding van Outlook af?
Heb hem als printscreen in de bijlage gedaan.
Het antwoord zal standaard Yes moeten zijn.
Of nog liever helemaal geen melding.

Uiteraard moet dit alleen gelden binnen deze code en niet als standaard instelling.

Alvast bedankt.
 

Bijlagen

  • Outlook melding.jpg
    Outlook melding.jpg
    31,8 KB · Weergaven: 32
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan