Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Rekursiver Datentyp nicht möglich, Alternativen?

Frage Entwicklung VB for Applications

Mitglied: mabue88

mabue88 (Level 2) - Jetzt verbinden

28.04.2014, aktualisiert 14:02 Uhr, 1411 Aufrufe, 4 Kommentare

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:

01.
Type myHTMLElement 
02.
    DefinitionLine As String 
03.
    Content as String 
04.
    Children() As myHTMLElement 
05.
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:

01.
<html> 
02.
    <head> 
03.
        <title>Beispieltitel</title> 
04.
    </head> 
05.
    <body> 
06.
        Das ist der Body 
07.
    </body> 
08.
</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?
Mitglied: colinardo
28.04.2014, aktualisiert um 17:56 Uhr
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:
01.
'IE Objekt erstellen 
02.
Set objIE = CreateObject("InternetExplorer.Application") 
03.
 
04.
'HTML Dokument laden 
05.
objIE.Navigate "C:\test.html" 
06.
Set doc = objIE.Document 
07.
 
08.
' HTML-Body Element holen 
09.
Set bodyNode = doc.getElementsByTagName("body")(0) 
10.
 
11.
'Neues Element und einem Textnode erstellen 
12.
Set divNode = doc.createElement("div") 
13.
Set textNode = doc.CreateTextNode("Das ist ein Testtext in einem DIV-Container") 
14.
 
15.
' Textnode an das DIV anhängen 
16.
divNode.appendChild(textNode) 
17.
 
18.
'das neue Element in den Body einfügen 
19.
bodyNode.appendChild(divNode) 
20.
 
21.
'HTML testweise in einer MessageBox ausgeben 
22.
MsgBox doc.documentElement.outerHTML 
23.
 
24.
'IE schließen 
25.
objIE.Quit 
26.
Set objIE = Nothing 
27.
Set doc = Nothing
Grüße Uwe
Bitte warten ..
Mitglied: mabue88
28.04.2014 um 16:05 Uhr
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
Bitte warten ..
Mitglied: mabue88
29.04.2014 um 10:53 Uhr
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
Bitte warten ..
Mitglied: colinardo
29.04.2014, aktualisiert um 11:07 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Netzwerk
Kein RDP über VPN per MS-TSC möglich (9)

Frage von survial555 zum Thema Windows Netzwerk ...

Microsoft
Keine Anmeldung mehr möglich (Server 2012 R2) (4)

Frage von Shnuuu zum Thema Microsoft ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...