Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1572to1576
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
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
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 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
AW: Mit Excel VBA Werte
18.08.2017 21:55:33
Paddy
Hammer!
besten Dank, es funktioniert jetzt!
Beste Grüße
Paddy
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge