Rekursiver Datentyp nicht möglich, Alternativen?
Hallo,
in einem VBA-Programm soll der Inhalt einer HTML-Seite verarbeitet werden. Dafür hätte ich mir gerne eine eigenen Datentyp erstellt, in dem ich die HTML-Elemente ähnlich der Ordnerstruktur in Windows Explorer einsortieren kann. Der HTML-Quellcode liegt als String vor. Den Datentyp wollte ich so in VBA erstellen:
Beim Erstellen einer Variable des Datentyps kommt die Fehlermeldung:
"Fehler beim Kompilieren: Wechselseitige Abhängigkeit von Modulen"
Hier ein Beispiel HTML-Code, der in der folgenden Art in einem Datentyp abgelegt werden soll:
Meine "Wurzelvariable" heisst HTML.
HTML.DefinitionLine = "<html>"
HTML.Children(0).DefinitionLine = "<head>"
HTML.Children(0).Children(0).DefinitionLine = "<title>"
HTML.Children(0).Children(0).Content = "Beispieltitel"
HTML.Children(1).DefinitionLine = "<body>"
HTML.Children(1).Children(0).Content = "Das ist der Body"
Welche Möglichkeiten habe ich hierfür in VBA?
in einem VBA-Programm soll der Inhalt einer HTML-Seite verarbeitet werden. Dafür hätte ich mir gerne eine eigenen Datentyp erstellt, in dem ich die HTML-Elemente ähnlich der Ordnerstruktur in Windows Explorer einsortieren kann. Der HTML-Quellcode liegt als String vor. Den Datentyp wollte ich so in VBA erstellen:
Type myHTMLElement
DefinitionLine As String
Content as String
Children() As myHTMLElement
End Type
Beim Erstellen einer Variable des Datentyps kommt die Fehlermeldung:
"Fehler beim Kompilieren: Wechselseitige Abhängigkeit von Modulen"
Hier ein Beispiel HTML-Code, der in der folgenden Art in einem Datentyp abgelegt werden soll:
<html>
<head>
<title>Beispieltitel</title>
</head>
<body>
Das ist der Body
</body>
</html>
Meine "Wurzelvariable" heisst HTML.
HTML.DefinitionLine = "<html>"
HTML.Children(0).DefinitionLine = "<head>"
HTML.Children(0).Children(0).DefinitionLine = "<title>"
HTML.Children(0).Children(0).Content = "Beispieltitel"
HTML.Children(1).DefinitionLine = "<body>"
HTML.Children(1).Children(0).Content = "Das ist der Body"
Welche Möglichkeiten habe ich hierfür in VBA?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 236650
Url: https://administrator.de/forum/rekursiver-datentyp-nicht-moeglich-alternativen-236650.html
Ausgedruckt am: 14.05.2025 um 00:05 Uhr
4 Kommentare
Neuester Kommentar
Hallo mabue,
nur das wir uns nicht missverstehen du meinst VBA (Visual Basic for Applications) und nicht VB.Net ?
In VBA geht das z.B. mit dem InternetExplorer Objekt. Das kann dein HTML aus deinem File laden, und dann kannst du es mit den Standard-DOM-Methoden bearbeiten und auslesen.
Beispiel:
Grüße Uwe
nur das wir uns nicht missverstehen du meinst VBA (Visual Basic for Applications) und nicht VB.Net ?
In VBA geht das z.B. mit dem InternetExplorer Objekt. Das kann dein HTML aus deinem File laden, und dann kannst du es mit den Standard-DOM-Methoden bearbeiten und auslesen.
Beispiel:
'IE Objekt erstellen
Set objIE = CreateObject("InternetExplorer.Application")
'HTML Dokument laden
objIE.Navigate "C:\test.html"
Set doc = objIE.Document
' HTML-Body Element holen
Set bodyNode = doc.getElementsByTagName("body")(0)
'Neues Element und einem Textnode erstellen
Set divNode = doc.createElement("div")
Set textNode = doc.CreateTextNode("Das ist ein Testtext in einem DIV-Container")
' Textnode an das DIV anhängen
divNode.appendChild(textNode)
'das neue Element in den Body einfügen
bodyNode.appendChild(divNode)
'HTML testweise in einer MessageBox ausgeben
MsgBox doc.documentElement.outerHTML
'IE schließen
objIE.Quit
Set objIE = Nothing
Set doc = Nothing
weniger umfangreichen Datentyp
was ist hier Umfangreich ? Der IE ist doch sowieso auf jedem Rechner verfügbar. Womit begründet sich dein Wunsch ?Dann bau dir halt eine COM-Bibiliothek mit Visual Studio die deine gewünschte Funktionalität implementiert und binde sie mit CreateObject() in dein VBA ein. Dann hast du aber die zusätzliche Aufgabe die Bibliothek auf den Clients zu registrieren. Ansonsten musst du dir die Funktionalität mit Regex selber nachbauen...
Grüße Uwe