piotor04
Goto Top

Ganztägier Outlooktermin per VBA aus Excel versenden

Hallo alle zusammen,

ich habe bei euch diesen Thread her gefunden:
Mit Excel einen Termin in Outlook erzeugen

leider kann ich mir daraus nicht ganz ableiten wie ich bei mir den Fehler mit dem Ganztagesevent ableite.
Ich kopier einfach mal den Text aus einem anderen Forum wo mir keiner helfen konnte inkl. dem Link zur Datei face-smile

Und zwar möchte ich peer Excel einen Termin an einen Verteiler senden welcher als ganztägiger Termin eingetragen werden soll.

Also nicht als Termin von 0 bis 23.59 sondern als ganztägiger.
Dies ist einfach elegante rund müllt keine Kalender zu.

hier meine aktuelle Datei.

Sie holt sich die Technikernamen aus Tabelle2(Daten) und die mails aus Tabelle3(Emails)

http://www.herber.de/bbs/user/105398.xlsm

Es funktioniert alles so wie iche s möchte nur klappt einfach der Tagesevent nicht. wäre super wenn mir wer helfen könnte.

Danke



Edit: Scheint irgendwie Probleme mit dem Einfügen des Excellinks zu geben. Müsste man also kopieren. Sry

Content-Key: 304412

Url: https://administrator.de/contentid/304412

Printed on: April 23, 2024 at 18:04 o'clock

Mitglied: 129148
129148 May 13, 2016 updated at 06:31:27 (UTC)
Goto Top
Hmm, hat der Kommentator dort doch in einem Kommentar erläutert wie dies zu machen ist.

Erstens die Eigenschaft AllDayEvent = True setzen und dann die Zeiten in reine Datumswerte mit 12:00AM also 00:00 Uhr umzuwandeln. Für ein Tagesevent ist für das Enddatum ein Tag zum Startdatum hinzuzurechnen (DateAdd)

Die Essenziellen Bestandteile sind also (Zelle A2 ist nur zur Veranschaulichung und selbstredend anzupassen)
AppointmentObject.AllDayEvent = True
AppointmentObject.Start = DateValue(Range("A2").Value)  
AppointmentObject.End = DateValue(DateAdd("d",1,Range("A2").Value))  
DateValue übernimmt hier ja die Umwandlung in Datumswerte ohne Zeit.
Das Enddatum wird hier einfach mit DateAdd um einen Tag vergrößert was für ein Tagesevent ja nötig ist.

Das ist alles was dafür nötig ist, damit der Termin ein Tagesevent wird.
Member: Piotor04
Piotor04 May 13, 2016 at 06:40:53 (UTC)
Goto Top
Hallo danke für deine Antwort.

Ich habe NICHT den Code von demjenigen dort genommen und bin leider zu dumm den auf meinen Code zu übertragen, daher der Excellink face-wink
bei mir sieht der Code wie folgt aus und ich check nicht wie ich den so schreibe, dass ich einen Ganztagesevent draus bekomme.

Public Sub Versenden()

    Dim rng As Range
    Dim OutApp As Object
    Dim OutApptmt As Object
    Dim OutMail As Object
    Dim olOldBody As String


    'Schleife zum Speichern der Emailadressen in der Variablen Ausgabe  

    Dim Counter    As Long
    Dim MailAdressen As String
    
    With Sheets("Emails")  
    MailAdressen = ""  
    Counter = 2                                     'Coutner auf 2 setzen (2 Reihe)  
    Do                                              ' Schleifen-Anfang  
        MailAdressen = MailAdressen + .Cells(Counter, 3) + ";"    'Ausgabe  wird mit dem Wert aus Spalte B und entsprechender Reihe befüllt  
        Counter = Counter + 1                      ' Countern-Variable um 1 erhöhen  

    Loop Until .Cells(Counter, 1) = ""               ' Schleife verlassen wenn nächste Zelle leer ist.  

    If Cells(Counter, 1) = "" Then                  'Schleife Prüft ob aktuelle Zelle leer ist und wenn ja wird der letzte  
        MailAdressen = Left(MailAdressen, Len(MailAdressen) - 1)   ' " ; "entfernt  
    End If
    End With



    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
 
    Set rng = Nothing
    On Error Resume Next
    Set rng = Sheets(1).Range("A:A").SpecialCells(xlCellTypeVisible)  
    On Error GoTo 0
 
    If rng Is Nothing Then
        MsgBox "Kein Bereich markiert!", vbOKOnly  
        Exit Sub
    End If
 
    Set OutApp = CreateObject("Outlook.Application")  
    'Techniker  
    var_Techniker = Range("A2").Value  
    'Firma  
    var_Firma = Range("B2").Value  
    'Startdatum  
    'var_startdatum = Cells(4, 3)  
    'MsgBox (var_startdatum)  
    var_Startdatum = Format(Range("C2").Value, "dd.mm.yyyy")  
    'Enddatum  
    var_Enddatum = Format(Range("D2").Value + 1, "dd.mm.yyyy")  
    var_Enddatum1 = Format(Range("D2").Value, "dd.mm.yyyy")  
    'Enddatum Ausgabe  
    var_Enddatumausgabe = Format(Range("D2").Value, "dd.mm.yyyy")  
        
   Set OutApptmt = OutApp.CreateItem(1)
    With OutApptmt
        .Subject = var_Firma & " Techniker im Haus"  
        .Start = var_Startdatum
        .End = var_Enddatum
        'ganztägier Event  
        .AllDayEvent = True
        '.Save  
        Set OutMail = .ForwardAsVcal
    End With
 
    On Error Resume Next
    With OutMail
        .GetInspector.display
        Oldbody = .Body                     'Aktueller Body ( Signatur) wird als Oldbody gespeichert  
        .To = MailAdressen
        .cc = ""  
        .bcc = ""  
        
        'Zum Prüfen ob mehrere Tage oder nur ein Tag  
        If var_Startdatum = var_Enddatum1 Then
            
            .Subject = var_Firma & " Techniker - " & var_Techniker & " am: " & var_Startdatum & " im Haus"  
            
            .Body = "Hallo alle zusammen," & vbCrLf & vbCrLf & "am " & var_Startdatum & " wird Herr " & var_Techniker & _  
            " von der Firma " & var_Firma & " im Haus sein." & vbCrLf & Oldbody  
            'Body wird mit Text gefüllt und anschließend wird Oldbody ( Signatur) angehängt um eine Mail inkl. Signatur zu erhalten.  
            Else
            
            .Subject = var_Firma & " Techniker - " & var_Techniker & " von: " & var_Startdatum & " bis: " & var_Enddatumausgabe & " im Haus"  
            
            .Body = "Hallo alle zusammen," & vbCrLf & vbCrLf & "am " & var_Startdatum & " bis zum " & var_Enddatumausgabe & " wird Herr " & var_Techniker & _  
            " von der Firma " & var_Firma & " im Haus sein." & vbCrLf & Oldbody  
            'Body wird mit Text gefüllt und anschließend wird Oldbody ( Signatur) angehängt um eine Mail inkl. Signatur zu erhalten.  
        
        End If


        .display
        '.send 'automatisch senden ohne an zu zeigen  
    End With
    On Error GoTo 0
 
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub


Hoffe dadurch wird mein Problem klarer :X
Mitglied: 129148
129148 May 13, 2016 updated at 06:57:22 (UTC)
Goto Top
Wenn du die Start und Endzeiten wie in meinem Beispiel geändert hättest und meinen Post mal gründlich gelesen hättest..., naja wie immer Kindergarten hier.
Und irgendwelche verseuchten Makro-Sheets lade ich mir nicht von irgendwelchen Servern.

Ändere diese Zeilen so ab
var_Startdatum = DateValue(Range("C2").Value)  
var_Enddatum = DateAdd("d",1,DateValue(Range("D2").Value))  
Hoffe dadurch wird mein Problem klarer :X
Mir ist das auch ohne deinen Code klar. Du solltest ihn aber auch verstehen, und die Erläuterung dazu habe ich dir oben schon gegeben. Ein bisschen sollte man sich mit dem Code schon beschäftigen, viel Unterschied zum anderen Post gibt es da definitiv nicht. Das Appointmentobjekt hatte ich nur einen generischen Namen gegeben und die Zelle war nur ein Beispiel.
Member: Piotor04
Piotor04 May 13, 2016 at 08:18:24 (UTC)
Goto Top
Ok ich glaub wir reden aneinander vorbei oder ich hab mich nicht klar ausgedrückt.

Wenn ich diesen Termin bei mir mit .Save sichere bekomm ich bei mir einen Ganztagesevent eingetragen.
Wenn ich diesen Termin jedoch versende muss der Empfänger den Termin ja in seinen Kalender übertragen.

Doppelklick drauf.
und Öffnen klicken.
Jetzt bekomme ich den Termin mit allem was ich angelegt habe AUßER dem Haken beim ganztägigen Ereignis.

Leider weiß ich nicht wie hier das ganztägige Ereignis ankommt bzw. was ich dafür machen muss.
Mit deiner Änderung klappt alles auch wie es jetzt schon ist. Nur sendet es auch den ganztägigen Evenet nicht mit.

Grüße
Mitglied: 129148
Solution 129148 May 13, 2016 updated at 09:43:17 (UTC)
Goto Top
Ah OK.

Outlook supported via vCalendar keine AllDayEvents in dem Sinne mit dieser Export-Option. Dort sind dann eben nur die Zeiten eingetragen, aber die Option Ganztagesevent hat die Funktion ExportAsVCal nicht implementiert.

Das ist der Grund.
Member: Piotor04
Piotor04 May 13, 2016 at 10:49:57 (UTC)
Goto Top
Achso, Danke. Das erklärt natürlich einiges.
Dann muss ich wohl damit leben, dass die Ereignisse im Outlook über die ganze Seite gehen :X
Mitglied: 129148
129148 May 13, 2016 updated at 10:54:00 (UTC)
Goto Top
Du könntest es über die Funktion GetCalendarExporer() machen, der exportiert kompatible *.ics Dateien die ein AllDayEvent supporten. Dazu müsstest du dir einen extra Kalender dafür erstellen in dem du temporär immer dein Event speicherst dann den Range des Termins exportierst an eine Mail anhängst und dann das Event wieder löschst.
Das wäre zumindest ein Workaround.
Member: Piotor04
Piotor04 May 17, 2016 at 15:31:29 (UTC)
Goto Top
Hallo 129148,

ist wohl leider für meinen Fall nicht durchführbar, da mit dieser Excel mehrere Leute arbeiten sollen.
Müsste ich also bei jedem den gleichen Zusatzkalender anlegen.
Müssen die Leute erstmal so damit leben.

Falls es zu viel negative Kritik gibt werde ich wohl nochmals drüber nachdenken face-smile

Grüße Und danke