HTML-Termin erzeugen
#1
Hi,

ich möchte mit VBA einen Outlook Termin erzeugen mit Einfügen eines Bereiches aus einer Tabelle.

Bei dem Makro, das ich gefunden habe, kommt die Fehlermeldung:
Laufzeitfehler 438
Objekt unterstützt diese Eigenschaft oder Methode nicht und
PHP-Code:
        .HTMLBody bodyText ' Verwende HTMLBody für formatierte Inhalte 
ist gelb markiert

Was ist da falsch?

Microsoft 365 for Business
Gruß Ralf

Sub CreateOutlookAppointmentWithDynamicTable()
Dim OutlookApp As Object
Dim OutlookAppointment As Object
Dim cell As Range
Dim bodyText As String
Dim rowText As String
Dim lastRow As Long

' Erstelle eine Instanz von Outlook
On Error Resume Next
Set OutlookApp = GetObject(class:="Outlook.Application")
If Err.Number <> 0 Then
Set OutlookApp = CreateObject(class:="Outlook.Application")
End If
On Error GoTo 0

' Bestimme die letzte belegte Zeile in Spalte AA
lastRow = ThisWorkbook.Sheets(1).Cells(ThisWorkbook.Sheets(1).Rows.Count, "AA").End(xlUp).Row

' Erstelle einen neuen Termin
Set OutlookAppointment = OutlookApp.CreateItem(1) ' 1 steht für olAppointmentItem

' Beginne mit dem HTML-Format für die Tabelle
bodyText = "<html><body><table border='1' style='border-collapse:collapse;'>"

' Füge den Zellbereich AA9 bis zur letzten belegten Zeile in Spalte AA zur Tabelle hinzu
For Each cell In Range("AA9:AC" & lastRow) ' Dynamischer Bereich bis zur letzten belegten Zeile
If cell.Column = 27 Then ' Wenn wir am Anfang einer Zeile sind (AA)
rowText = "<tr>" ' Neue Zeile beginnen
End If

rowText = rowText & "<td>" & cell.Value & "</td>" ' Zelle hinzufügen

If cell.Column = 29 Then ' Wenn wir am Ende der Spalte sind (AC)
rowText = rowText & "</tr>" ' Zeile beenden und zur nächsten Zeile übergehen
bodyText = bodyText & rowText ' Füge die Zeile zur Tabelle hinzu
End If
Next cell

bodyText = bodyText & "</table></body></html>" ' Tabelle und HTML abschließen

' Setze die Eigenschaften des Termins (Datum, Betreff usw.)
With OutlookAppointment
.Subject = "Neuer Termin"
.Start = Now + 1 ' Startzeit auf morgen setzen (kann angepasst werden)
.Duration = 60 ' Dauer in Minuten
.HTMLBody = bodyText ' Verwende HTMLBody für formatierte Inhalte
.ReminderSet = True
.ReminderMinutesBeforeStart = 15 ' Erinnerung 15 Minuten vorher
.Save ' Speichern des Termins
.Display ' Anzeige des Termins (optional)
End With

' Aufräumen
Set OutlookAppointment = Nothing
Set OutlookApp = Nothing

End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Dieser Code als Mail versenden funktioniert:
Sub Mail_senden()
  ' Sendet Mail mit integriertem Bereich als Bereich mit Signatur
  Dim WSh As Worksheet, WSh1 As Worksheet, WSh2 As Worksheet
  Dim sMailtext As String
  Dim loLetzte As Long
  Dim MailAdresse As String
 
  With Application
      '.Calculation = xlCalculationManual
      .ScreenUpdating = False
      .EnableEvents = False
  End With
 
  Set WSh = ThisWorkbook.Sheets("Stunden")          ' Datenblatt
  ' Set WSh1 = ThisWorkbook.Sheets("Daten")            ' Blatt mit Maildaten
  ' Set WSh2 = ThisWorkbook.Sheets("Tabelle1")          ' Datenblatt
 
  With WSh
      MailAdresse = .Range("H11")                        ' E-Mail-Adresse
      MailAdresse = MailAdresse & "; " & .Range("H12")
      loLetzte = .Cells(.Rows.Count, 2).End(xlUp).Offset(3, 0).Row
  End With
 
  With CreateObject("Outlook.Application").CreateItem(0)
      .Subject = WSh.Range("H14")                      ' Betreff
      .To = MailAdresse                                ' Empfänger
      .cc = WSh.Range("H12")                            ' CC
      '      sMailtext = "Liste aktueller Aufträge:¶¶"
      .Getinspector.Display                            ' Signatur holen
      .HTMLBody = "<span style='font-family:Arial;font-size:11pt;color:#000080;'><u>" _
          & Replace(sMailtext, "¶", "<br>") _
          & "</u></span>" & .HTMLBody
     
      WSh.Range("A1:F" & loLetzte).Copy            ' Bereich kopieren
      With .Getinspector.WordEditor.Application.Selection
        .Start = Len(sMailtext) + 0                    ' Mit der Einfügestelle ggf. spielen + x
        .Paste                                        ' Bereich in Mail einfügen
      End With
     
  End With
 
  With Application
      '.Calculation = xlCalculationAutomatic
      .ScreenUpdating = True
      .EnableEvents = True
  End With
 
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Antworten Top
#2
Ohne '.send'  kann dein zweiter Code nicht funktionieren.
Ich würde bevorzugen:

Code:
Sub M_snb()
  With Sheets("Stunden")
    sn = .Cells(11, 8).Resize(4)
    .Cells(1).CurrentRegion.Resize(, 6).Copy
  End With
 
  With CreateObject("Outlook.Application").CreateItem(0)
      .Subject = sn(1, 4)
      .To = sn(1, 1)
      .cc = sn(1, 2)
      .Getinspector.Display
      .HTMLBody = "<span style='font-family:Arial;font-size:11pt;color:#000080;'><u>" _
          & Replace(sn(1, 3), "¶", "<br>") & "</u></span>"
      With .Getinspector.WordEditor.Application.Selection
        .Start = Len(sn(1, 3))
        .Paste
      End With
      .send
  End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#3
Da du ja keine Datei gepostet hast, ein Schuss ins Blaue:
Das hier einfach umdrehen und aus:

bodyText = bodyText & rowText

das machen:

bodyText = rowText & body.Text
Antworten Top
#4
Hallo,

dein Code kann nicht funktionieren, weil ein AppointmentItem keine Eigenschaft HTMLBody besitzt, sondern lediglich eine Eigenschaft RTFBody,  so einfach.

In den neueren Versionen wird HTML zwar unterstützt, aber nicht als Property zur Verfügung gestellt. Hier eine kleine Information dazu:
https://stackoverflow.com/a/59098342

Außerdem wäre es schön gewesen, wenn du deine Quelle des Code angegeben hättest (ich vermute mal, daß dieser Code nicht auf deinem M... gewachsen ist), sonst könnten die Helfer vielleicht etwas über den Kontext erfahren und eine andere Hilfe anbieten.

Gruß
Knobbi38
[-] Folgende(r) 1 Nutzer sagt Danke an knobbi38 für diesen Beitrag:
  • derHoepp
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste