mabue88

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:

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?
Share on Facebook
Share on X (Twitter)
Share on Reddit
Share on Linkedin

Content-ID: 236650

Url: https://administrator.de/forum/rekursiver-datentyp-nicht-moeglich-alternativen-236650.html

Printed on: July 18, 2025 at 01:07 o'clock

colinardo
colinardo Apr 28, 2014 updated at 15:56:20 (UTC)
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:
'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
Grüße Uwe
mabue88
mabue88 Apr 28, 2014 at 14:05:49 (UTC)
Hallo Uwe,

du hast mich richtig verstanden, ich meine Tatsächlich VBA (Visual Basic for Applications). Ich verwende die Sprache gerne in Kombination mit Excel, da für ihre Ausführung auf Geschäftsrechnern nur Office installiert sein muss (ich habe noch keinen normalen Geschäfts-Arbeitsplatzrechner gesehen, auf dem das nicht installiert war). Der Austausch geschieht über eine Exceldatei. Nichts muss installiert werden...

Ich werde mir deinen Vorschlag heute abend mal genauer anschauen und mich dann wieder melden.

Danke schon mal!

Gruss
mabue
mabue88
mabue88 Apr 29, 2014 at 08:53:53 (UTC)
Hallo Uwe,

ich hab mir gestern mal deinen Vorschlag angesehen. Prinzipiell ist es genau das, was ich will. Aber gibt es keine Möglichkeit das in einem weniger umfangreichen Datentyp abzulegen?

Danke schon mal!
Gruss
mabue
colinardo
colinardo Apr 29, 2014 updated at 09:07:17 (UTC)
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