Fehler bei RangetoHTML in Excel VBA beheben
Schritt-für-Schritt-Anleitung
Um den Fehler "Sub oder Function nicht definiert" zu beheben, der beim Einsatz der RangetoHTML Funktion auftritt, folge diesen Schritten:
-
VBA-Editor öffnen: Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.
-
Modul erstellen: Füge ein neues Modul hinzu, indem Du mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" klickst, dann "Einfügen" und "Modul" auswählst.
-
Code einfügen: Kopiere den folgenden Code für die RangetoHTML Funktion in das Modul:
Function RangetoHTML(rng As Range)
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
Application.CutCopyMode = False
End With
With TempWB.PublishObjects.Add(SourceType:=xlSourceRange, Filename:=TempFile, Sheet:=TempWB.Sheets(1).Name, Source:=TempWB.Sheets(1).UsedRange.Address, HtmlType:=xlHtmlStatic)
.Publish (True)
End With
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.readall
ts.Close
TempWB.Close savechanges:=False
Kill TempFile
End Function
-
Mailversand anpassen: Stelle sicher, dass Deine Email_generieren Subroutine die RangetoHTML Funktion korrekt aufruft:
Sub Email_generieren()
Dim rng As Range
Set rng = Range("A9:F13")
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = Range("B1").Value
.CC = Range("B6").Value
.Subject = "Text " & Range("B7").Value
.HTMLBody = "Guten Morgen " & Range("B1").Value & "," & RangetoHTML(rng)
.Display
End With
End Sub
-
Testen: Speichere Deine Änderungen und teste den Code, indem Du die Email_generieren Subroutine ausführst.
Häufige Fehler und Lösungen
Alternative Methoden
Wenn Du Probleme mit der RangetoHTML Funktion hast, kannst Du auch versuchen, die Bereiche direkt in die E-Mail zu kopieren:
Sub Email_generieren()
Dim rng As Range
Set rng = Range("A9:F13")
rng.Copy
With CreateObject("Outlook.Application").CreateItem(0)
.To = Range("B1").Value
.CC = Range("B6").Value
.Subject = "Text " & Range("B7").Value
.GetInspector.WordEditor.Application.Selection.Paste
.Display
End With
End Sub
Praktische Beispiele
Beispiel 1: Verwende die RangetoHTML Funktion, um einen Excel-Bereich in eine HTML-E-Mail einzufügen. Achte darauf, dass die Funktion so definiert ist:
Function RangetoHTML(rng As Range)
' (Code wie oben einfügen)
End Function
Beispiel 2: Kopiere einen Bereich direkt als Bild in die E-Mail:
Sub Email_generieren()
Dim rng As Range
Set rng = Range("A9:F13")
rng.CopyPicture
With CreateObject("Outlook.Application").CreateItem(0)
.To = Range("B1").Value
.CC = Range("B6").Value
.Subject = "Text " & Range("B7").Value
.GetInspector.WordEditor.Application.Selection.Paste
.Display
End With
End Sub
Tipps für Profis
- Verwende die
On Error Resume Next Anweisung: Um Fehler beim Ausführen von VBA-Code zu ignorieren und den Code stabiler zu machen.
-
Optimierung der Leistung: Deaktiviere die Bildschirmaktualisierung während der Ausführung Deines Codes, um die Performance zu verbessern:
Application.ScreenUpdating = False
' Dein Code hier
Application.ScreenUpdating = True
FAQ: Häufige Fragen
1. Brauche ich die RangetoHTML Funktion zusätzlich zu meinem Code?
Ja, die RangetoHTML Funktion ist erforderlich, um den kopierten Bereich in HTML umzuwandeln.
2. Wo definiere ich den Bereich, den ich einfügen will?
Der Bereich wird in der Zeile Set rng = Range("A9:F13") definiert. Du kannst die Adresse anpassen, um den gewünschten Bereich zu ändern.