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, 1443 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 ..
Ähnliche Inhalte
Neue Wissensbeiträge
Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(3)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Heiß diskutierte Inhalte
Exchange Server
Exchange 2016 Standard Server 2012 R2 Hetzner Mail (41)

Frage von Datsspeed zum Thema Exchange Server ...

Windows 7
gelöst Lokales Adminprofil defekt (25)

Frage von Yannosch zum Thema Windows 7 ...

Off Topic
gelöst Fachzeitschriften als E-Book oder hardcoded? (11)

Frage von KowaKowalski zum Thema Off Topic ...

Windows 10
Windows Store Apps ohne Windows Store installieren (10)

Frage von keefien zum Thema Windows 10 ...