Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mit Excel VBA Werte auf eine Website übertragen

Forumthread: Mit Excel VBA Werte auf eine Website übertragen

Mit Excel VBA Werte auf eine Website übertragen
15.08.2017 18:20:46
Paddy
Hallo VBA-Experten,
ich habe zwar schon etwas mit Excel VBA programmiert, bin aber noch lang kein Profi, also bräuchte ich einmal eure Hilfe. Ich arbeite mit der Kollaborationssoftware Confluence, welche über einen Internet Browser (IE) bedienbar ist. Unter anderem können dort Seiten erstellt werden und die sind dann über eine URL aufrufbar.
Mein Anliegen:
Diese Seiten möchte ich automatisiert mit Excel erstellen und teilweise klappt das auch und zwar mit dem unten angegebenen Code. D.h. ich rufe eine Seite (im Bearbeitungsmodus) mittels navigate auf, trage den Titel über die getelementbyid - methode in die Titelzeile ein und speicher die Seite ebenfalls mit derselben Methode ab.
Frage:
Hiermit ist es leider noch nicht geschafft. Ich möchte der Tabelle und dem Panel (Bild1) ebenfalls Text zuweisen, weiß aber nicht wie ich diese Elemente ansprechen soll. Ich könnte mir so etwas vorstellen wie:
IEDocument.getElementsByClass("ConfluenceTd")(0).Value = "Hallo"
' der html-Code ist in Bild2 dargestellt
oder etwas ähnliches mit getElementsByTagName.
Aber bisher schlugen alle Versuche fehl.
Also wie kann ich das Problem am besten lösen?
Bild 1: Seitenansicht im Confluence mit Tabelle und Panel
Userbild
Bild 2: html-code
Userbild
Hier der Code:
Option Explicit
Public IEApp, IEDocument As Object, Nummer As String, Titel As String
Public Sub create_new_site()
Nummer = Range("B2").Value
Titel = Range("B3").Value
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.navigate "https://pgentwicklung.atlassian.net/wiki/pages/copypage.action? _
idOfPageToCopy=360463&spaceKey=EN"
Call SeitenaufbauAbwarten
IEDocument.getElementById("content-title").Value = Nummer & Titel
IEDocument.getElementById("rte-button-publish").Click
Call SeitenaufbauAbwarten
End Sub

Public Sub SeitenaufbauAbwarten()
Do: Loop Until IEApp.busy = False
Do: Loop Until IEApp.busy = False
Set IEDocument = IEApp.document
Do: Loop Until IEDocument.ReadyState 4
End Sub

Vielen Dank und liebe Grüße
Paddy
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit Excel VBA Werte auf eine Website übertragen
15.08.2017 19:19:38
Matthias
Moin!
In deinem Fall würde ich über den Tag table gehen. Du hast ja eine Tabelle, die du befüllen willst. Sollte in etwas so aussehen.
IEDocument.getElementsByTagName("table")(0).getElementsByTagName("tr")(0).getElementsByTagName("td")(1).value = "mein Text"
Ist jetzt nur auf die schnelle und ungetestet. Damit solltest du in Zeile 1 den Wert in der zweiten Spalte setzen. Der INdex der Table, tr und td beginnen bei 0.
VG
Anzeige
AW: Mit Excel VBA Werte auf eine Website übertragen
15.08.2017 19:52:02
Paddy
Vielen Dank erstmal,
habe den Code direkt mal ausprobiert:
Excel spuckt mir hier die folgende Fehlermeldung aus:
Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt
muss ich hier vorab noch etwas definieren, damit die Datenübergabe funktioniert?
Mit besten Grüßen
Paddy
Anzeige
AW: Mit Excel VBA Werte auf eine Website übertragen
15.08.2017 21:37:22
Matthias
Hallo! Eigentlich nicht. Poste doch bitte mal den ganzen Code, damit man sehen kann wie und wo du die Zeile eingebaut hast. Und welche Zeile wirft den Fehler aus? VG
AW: Mit Excel VBA Werte auf eine Website übertragen
16.08.2017 06:35:32
Paddy
Hi,
so den folgenden Code habe ich ausprobiert.
Option Explicit
Public IEApp, IEDocument As Object, Nummer As String, Titel As String
Public Sub create_new_site()
Nummer = Range("B2").Value
Titel = Range("B3").Value
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.navigate "https://pgentwicklung.atlassian.net/wiki/pages/copypage.action? _
idOfPageToCopy=360463&spaceKey=EN"
Call SeitenaufbauAbwarten
IEDocument.getElementsByTagName("table")(0).getElementsByTagName("tr")(0).getElementsByTagName(" _
td")(1).value = "beispieltext"
Call SeitenaufbauAbwarten
End Sub


Public Sub SeitenaufbauAbwarten()
Do: Loop Until IEApp.busy = False
Do: Loop Until IEApp.busy = False
Set IEDocument = IEApp.document
Do: Loop Until IEDocument.ReadyState 
End Sub
Vielen Dank und liebe Grüße
Paddy
Anzeige
AW: Mit Excel VBA Werte auf eine Website übertragen
16.08.2017 11:43:41
Matthias
Moin! Also habe mal noch getestet und hier ein funktionierender Code. Das value war falsch. Hätte den innerhtml nutzen sollen. Einfach mal probieren. Die Sub für die Prüfung habe ich mit integriert - die Zeilen machen den COde auch nicht unlesbarer. VG

Public Sub create_new_site()
Nummer = Range("B2").Value
Titel = Range("B3").Value
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.navigate "https://pgentwicklung.atlassian.net/wiki/pages/copypage.action?idOfPageToCopy= _
360463&spaceKey=EN"
Set IEDocument = IEApp.document
Do: Loop Until IEApp.busy = False
Do: Loop Until IEDocument.ReadyState  4
IEDocument.getElementsByTagName("table")(0).getElementsByTagName("tr")(0) _
.getElementsByTagName("td")(1).innerhtml = "beispieltext"
Do: Loop Until IEApp.busy = False
Do: Loop Until IEDocument.ReadyState  4
End Sub

Anzeige
AW: Mit Excel VBA Werte auf eine Website übertragen
16.08.2017 18:09:12
Paddy
Also:
ich habe den Code mal ausprobiert und nun erscheint keine Fehlermeldung mehr, jedoch wird auch kein Text eingefügt. Dem bin ich jetzt noch einmal auf dem Grund gegangen und habe mittels folgenden Code
Debug.Print objIE.document.getElementsByTagName("table")(0).innerHTML
bzw.
Debug.Print objIE.document.getElementsByTagName("table")(0).textContent
getestet was überhaupt bei den Elementen als Inhalt gefunden wird. Und table(0) ist definitiv nicht die Tabelle, die ich ansprechen möchte. Interessant ist auch, dass der Tag name table nur einmal vorkommt: Heißt mit den weiteren Indizes 1,2,3... werden gar keine Elemente gefunden bzw. die bereits genannte Fehlermeldung erscheint wieder.
Liegt der Fehler ggf. darin, dass die Website Frames nutzt? Wie kann man hier den html code ansprechen?
Danke und LG
Paddy
Anzeige
AW: Mit Excel VBA Werte
16.08.2017 19:52:32
Matthias
Moin! Also habe eben mal getestet. Auf einer Seite mit Frames greift er trotzdem auf das Element zu. Der Code sucht sich ja eigentlich nur im Textfluß den Tag Table raus und da sollte es egal sein, wo der steht. Kannst du mal bitte den Quellcode deiner Seite posten (komplett und nicht als Bild)? Dann würde ich das mal an der Originaldatei testen.
Um zu schauen, wieviele Tabellen der Code hat, kannst du mit der Eigenschaft length arbeiten (geht auch so bei tr und td). Sieht dann so aus:
objIE.document.getElementsByTagName("table").length
Die Rückgabe ist die Anzahl der Tabellen (manchmal hängt das Zusammenspiel von EX und IE und es werden mehr Tabellen erzeugt - hatte ich zumindest auf der Arbeit mal).
Würde wie gesagt mit der Originalseite mal testen und schauen, woran es liegen könnte. VG
Anzeige
AW: Mit Excel VBA Werte
16.08.2017 21:10:45
Paddy
Hi, wenn ich den gesamten Quelltext kopiere und hier einfüge dann blockiert mir Chrome den Post: "Chrome hat ungewöhnlichen Code festgestellt und möchte Daten etc. schützen..." so in der Art.
Um den Quelltext komplett zu kopieren bin ich auf das erste Element (body) gegangen, unter welchem alle anderen Elemente stehen und habe über RMT... copy ...paste alles hier eingefügt. (Browser Chrome ...Developer Tool ... Reiter Elements). Ist das überhaupt richtig so?
Danke!
Mit besten Grüßen
Paddy
Anzeige
AW: Mit Excel VBA Werte
16.08.2017 21:32:58
Matthias
Moin! Also es kam noch nichts an. Ansonsten packe den Quellcode in ein Modul einer leeren Mappe und lade die hoch. Ziehe mir das dann dort raus. VG
AW: Mit Excel VBA Werte
17.08.2017 20:00:06
Paddy
Hi,
danke schonmal!
Hab die Excel mit dem Code mal angehängt. Müsste in Modul1 liegen.
https://www.herber.de/bbs/user/115542.xlsm
LG
Paddy
Anzeige
AW: Mit Excel VBA Werte
18.08.2017 13:03:10
Matthias
Moin! Kannst du da nochmal schauen. In dem Code in Modul1 (wo anders war keiner) kommt keine Tabelle drin vor. VG
AW: Mit Excel VBA Werte
18.08.2017 16:56:51
Paddy
Hi,
die Frage ist wie ich gescheit an den html code rankomme? Also über Chrome...Seite aufrufen...gewünschtes Element auswählen...rechte Maustaste...Untersuchen...Elements (oben im Reiter) kann ich mir den Code anschauen. Aber wie kann ich diesen kopieren? Jedes Element einzeln ist sehr mühsam, da sehr viel Code vorhanden ist. Alles markiern und Strg+C funktioniert bei mir auch nicht.
Danke. VG Paddy
Anzeige
AW: Mit Excel VBA Werte
18.08.2017 18:57:54
Paddy
Hi,
So ich habe gerade noch mal etwas genauer geschaut und ich kann bis zum:
"#document"
"!DOCTYPE html"
alles auslesen. Aber die Elemente die dort drunter gegliedert sind finde ich nicht mehr. Ich habe dieses mal mit "outerhtml", "innerhtml" und "length" geprüft.
VG Paddy
AW: Mit Excel VBA Werte
18.08.2017 19:19:31
Matthias
Moin! Kannst du die Seite auf deinem Rechner speichern und dann das htm / html Dokument einfach in txt umbenennen? Das würde schon reichen. Habe kein Chrome und kann da keine Tipps geben. Bei FF kann man die Seite so speichern. Gibt es sonst bei Chrome eine Möglichkeit sich den gesamten Quellcode anzeigen zu lassen? Dann den einfach kopieren. VG
Anzeige
AW: Mit Excel VBA Werte
18.08.2017 20:45:21
Paddy
Moin, so hier habe ich die vollständige Seite mal gespeichert und in eine Textdatei geschrieben. Da man nur 300 kb Files hochladen kann, habe ich zwei Dateien hochgeladen.
https://www.herber.de/bbs/user/115572.txt
https://www.herber.de/bbs/user/115573.txt
Ich hoffe du kannst damit was anfangen.
Danke schonmal!
LG Paddy
Anzeige
AW: Mit Excel VBA Werte
18.08.2017 19:27:48
Paddy
Noch eine kurze Aktualisierung,
mit folgendem Code habe ich es hinbekommen den Bereich unterhalb von document auszulesen.
Debug.Print IEDocument.getElementById("wysiwygTextarea_ifr").contentWindow.document.body.outerHTML
Hier ist demnach auch die Tabelle enthalten, die ich ansprechen möchte. Der Code hat mir dieses hier ausgegeben (steht wieder in der Exceltabelle)
https://www.herber.de/bbs/user/115570.xlsm
Trotzdem schaffe ich es irgendwie nicht, in dem Baum zu navigieren und der Tabellenzelle Werte zuzuweisen.
VG Paddy
Anzeige
AW: Mit Excel VBA Werte
18.08.2017 21:42:02
Matthias
Moin! Also mit dem Quelltext von dir, wird mit folgender Zeile eingetragen.
IEDocument.getElementsByTagName("table")(1).getElementsByTagName("tr")(0).getElementsByTagName("td")(0).innerhtml = "beispieltext"
Das geht aber nur, wenn die Tabelle im eigentlich Code und nicht in einem IFRAME liegt. Sollte die Tabelle sich in einem IFRAME verstecken, dann so. Gehe mal davon aus, dass es nur einen IFRAME gibt, ansonten den Index davon erweitern oder (was ich grad nicht sehen kann) über die ID gehen.
IEDocument.getElementsByTagName("iframe")(0).contentWindow.document.body.getElementsByTagName(" _
table")(1).getElementsByTagName("tr")(0).getElementsByTagName("td")(0).innerhtml = "beispieltext"

mit id von dir im post sollte es dann so sein
IEDocument.getElementById("wysiwygTextarea_ifr").contentWindow.document.body. _
getElementsByTagName("table")(1).getElementsByTagName("tr")(0).getElementsByTagName("td")(0).innerhtml = "beispieltext"

VG
Anzeige
AW: Mit Excel VBA Werte
18.08.2017 21:55:33
Paddy
Hammer!
besten Dank, es funktioniert jetzt!
Beste Grüße
Paddy
;
Anzeige
Anzeige

Infobox / Tutorial

Mit Excel VBA Werte auf eine Website übertragen


Schritt-für-Schritt-Anleitung

  1. VBA-Umgebung einrichten: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Rechtsklicke im Projektfenster und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Option Explicit
    
    Public IEApp As Object, IEDocument As Object, Nummer As String, Titel As String
    
    Public Sub create_new_site()
        Nummer = Range("B2").Value
        Titel = Range("B3").Value
        Set IEApp = CreateObject("InternetExplorer.Application")
        IEApp.Visible = True
        IEApp.navigate "https://pgentwicklung.atlassian.net/wiki/pages/copypage.action?idOfPageToCopy=360463&spaceKey=EN"
        Call SeitenaufbauAbwarten
        IEDocument.getElementsByTagName("table")(0).getElementsByTagName("tr")(0).getElementsByTagName("td")(1).innerHTML = "beispieltext"
        Call SeitenaufbauAbwarten
    End Sub
    
    Public Sub SeitenaufbauAbwarten()
        Do: Loop Until IEApp.busy = False
        Set IEDocument = IEApp.document
        Do: Loop Until IEDocument.ReadyState = 4
    End Sub
  4. Daten eingeben: Trage die benötigten Daten in die Zellen B2 und B3 ein.

  5. Code ausführen: Führe das Makro create_new_site aus, um die Werte auf die Webseite zu übertragen.


Häufige Fehler und Lösungen

  • Laufzeitfehler 91: Dieser Fehler tritt auf, wenn das Objekt nicht korrekt gesetzt ist. Stelle sicher, dass die Webseite vollständig geladen ist, bevor du auf die Elemente zugreifst. Verwende die SeitenaufbauAbwarten-Subroutine, um sicherzustellen, dass der Ladevorgang abgeschlossen ist.

  • Kein Text wird eingefügt: Überprüfe, ob der Index der Tabelle oder der Zelle korrekt ist. Manchmal kann der gesuchte Index nicht existieren, wenn die Tabelle in einem IFRAME eingebettet ist. Verwende innerHTML, um den Inhalt zu setzen.


Alternative Methoden

Eine andere Möglichkeit, um Daten aus Excel in eine Website einzufügen, besteht darin, die Funktion getElementsByClass zu verwenden, um auf spezifische Klassen zuzugreifen. Hier ein Beispiel:

IEDocument.getElementsByClassName("deineKlasse")(0).innerHTML = "Hallo Welt"

Diese Methode kann hilfreich sein, wenn du mit spezifischen Elementen innerhalb der Webseite arbeitest, die nicht durch IDs oder Tags identifiziert werden können.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du mit Excel VBA Inhalte übertragen kannst:

  1. Text in eine Tabelle einfügen:

    IEDocument.getElementsByTagName("table")(0).getElementsByTagName("tr")(1).getElementsByTagName("td")(0).innerHTML = "Neuer Wert"
  2. Werte in ein IFRAME einfügen:

    IEDocument.getElementsByTagName("iframe")(0).contentWindow.document.body.getElementsByTagName("table")(0).getElementsByTagName("tr")(0).getElementsByTagName("td")(1).innerHTML = "Wert in IFRAME"
  3. Inhalte von einer Excel-Tabelle übertragen:

    Dim wert As String
    wert = Range("A1").Value
    IEDocument.getElementById("content-title").innerHTML = wert

Tipps für Profis

  • Debugging nutzen: Verwende Debug.Print, um Werte während der Ausführung deines Codes zu überprüfen. Das kann hilfreich sein, um sicherzustellen, dass du die richtigen Elemente ansprichst.

  • Website in Excel anzeigen: Du kannst auch eine Webseite direkt in Excel einbetten, um die Interaktion zu erleichtern. Dazu kannst du das WebBrowser-Steuerelement verwenden.

  • Ressourcen nutzen: Foren wie das Confluence Forum erstellen können dir helfen, spezifische Probleme zu lösen und neue Techniken zu lernen.


FAQ: Häufige Fragen

1. Warum kann ich nicht auf bestimmte Elemente zugreifen? Es kann sein, dass die Elemente in einem IFRAME eingebettet sind. Stelle sicher, dass du die IFRAME-Struktur korrekt ansprichst.

2. Welche Excel-Version benötige ich? Der Code sollte in Excel 2010 und höher funktionieren, da die grundlegenden VBA-Funktionen unterstützt werden.

3. Wie kann ich Fehler im Code debuggen? Nutze die Debugging-Tools im VBA-Editor, um Breakpoints zu setzen und Variablen zu überprüfen, während der Code ausgeführt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige