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

Per VBA in HTML textarea schreiben

Forumthread: Per VBA in HTML textarea schreiben

Per VBA in HTML textarea schreiben
Fritz0609
Ich würden gern per Makro in ein HTML-Formular schreiben. Folgende Schritte funktionieren:
InternetExplorer geht auf
Seite wird geladen
input1 wird beschrieben
aber:
textarea1 wird nicht beschrieben.
Der Code läuft durch und wirft keinen Fehler aus. Kann mir jemand sagen was ich falsch mache?
Zur Info eigentlich will die kopierte Range später in das textarea Feld einfügen. Das schreiben des Values ist nur der erste Test. Wenn also jemand einen alternativen Weg zum Copy und Paste in das Feld kennt, dann bringt mich das auch ans Ziel. Ich hatte es schon mit der Navigation über Sendkeys und Tab probiert, damit komme ich ins Feld, allerdings weiß ich dann nicht wie ich einen Paste Befehl übergebe.
Anbei zunächst der HTML-Code der beiden Felder:
input1: input type='text' id='input1' value='' style='width:66px;' class='dropdownHost' autocomplete='off' tabindex='0'
texarea1: textarea id='textarea1' name='Description' style='width:200px; height:100px; resize:none;' tabindex='0'
Und jetzt der Code:

Private Sub CommandButton2_Click()
Dim IEApp As Object
Range("A2:F17").Select
Selection.Copy
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate "https://beispielseite.beispiel.net"
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
With IEApp.Document
Do: Loop Until .readystate = "complete"
.getelementbyid("textarea1").Value = "test"
.getelementbyid("input1").Value = "Prio 1"
End With
Set IEApp = Nothing
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Per VBA in HTML textarea schreiben
13.09.2012 20:42:08
Fritz0609
hab beim nochmaligen durchlesen gemerkt, dass ich vor lauter konzentration auf das Problem ganz meine Manieren vergessen habe.
Also erstmal guten Abend in die Runde und vorab schon mal vielen Dank für die Hilfe.
Sorry.

AW: Per VBA in HTML textarea schreiben
13.09.2012 23:39:25
dan
Hallo,
Dein Code funktioniert prima, wenn ich eine page benutze, wo input1 und textarea1 existieren. Aber auf https://beispielseite.beispiel.net befinden sich diese elemente nicht.
Besser ist auch (denke ich) die MS Object Lib und Internet Controls zu referenzieren, so hat man intellisense. Beispiel fuer input1 und texyarea1:
Option Explicit
' Add References:
' - Microsoft HTML Object Library
' - Microsoft Internet Controls
Private Const URL As String = "C:\temp\Test.html"
Sub Test()
Dim browser As InternetExplorer
Set browser = New InternetExplorer
With browser
browser.Visible = True
browser.Navigate URL
Do: Loop Until browser.Busy = False
End With
Dim htmlDocument As htmlDocument
Set htmlDocument = browser.Document
' input
Dim inputElement As HTMLInputElement
Set inputElement = htmlDocument.getElementById("input1")
If (inputElement Is Nothing) Then
Err.Raise 123456789, , "inputElement is nothing. ID not found."
End If
inputElement.Value = "test"
' textarea
Dim textArea As HTMLTextAreaElement
Set textArea = htmlDocument.getElementById("textarea1")
If (textArea Is Nothing) Then
Err.Raise 123456789, , "textArea is nothing. ID not found."
End If
textArea.Value = "test2"
browser.Quit
Set browser = Nothing
End Sub
Gruss dan, cz.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Per VBA in HTML Textarea schreiben


Schritt-für-Schritt-Anleitung

Um per VBA in ein HTML-Textarea zu schreiben, kannst du folgende Schritte befolgen:

  1. VBA-Umgebung öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Referenzen hinzufügen: Gehe zu Extras > Verweise und füge die „Microsoft HTML Object Library“ und „Microsoft Internet Controls“ hinzu. Dies ermöglicht dir, die Objekte in deinem Code besser zu verwalten.

  3. Code einfügen: Füge den folgenden Code in ein neues Modul ein:

    Sub SchreibeInTextarea()
        Dim browser As InternetExplorer
        Set browser = New InternetExplorer
    
        browser.Visible = True
        browser.Navigate "https://beispielseite.beispiel.net"
    
        ' Warte, bis die Seite geladen ist
        Do While browser.Busy Or browser.readyState <> 4: DoEvents: Loop
    
        Dim htmlDocument As HTMLDocument
        Set htmlDocument = browser.Document
    
        ' Eingabefeld beschreiben
        Dim inputElement As HTMLInputElement
        Set inputElement = htmlDocument.getElementById("input1")
        inputElement.Value = "Prio 1"
    
        ' Textarea beschreiben
        Dim textArea As HTMLTextAreaElement
        Set textArea = htmlDocument.getElementById("textarea1")
        textArea.Value = "Dies ist ein Test."
    
        ' Browser schließen
        browser.Quit
        Set browser = Nothing
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

  • Error: Element nicht gefunden: Wenn du die Fehlermeldung erhältst, dass das Element nicht gefunden wurde, stelle sicher, dass die IDs in deinem HTML-Dokument korrekt sind. Überprüfe auch, ob das Element zum Zeitpunkt des Zugriffs geladen ist.

  • Textarea wird nicht beschrieben: Wenn das Textarea nicht beschrieben wird, könnte es daran liegen, dass das Dokument nicht vollständig geladen ist. Stelle sicher, dass du die Ladebedingungen korrekt überprüfst.


Alternative Methoden

Falls das direkte Setzen des Wertes nicht funktioniert, kannst du alternativ versuchen, den Inhalt per SendKeys einzugeben. Beachte jedoch, dass dies weniger zuverlässig ist:

AppActivate "Internet Explorer"
SendKeys "{TAB}"
SendKeys "Dies ist ein Test."

Diese Methode funktioniert nur, wenn das Fenster aktiv ist und kann zu unerwartetem Verhalten führen.


Praktische Beispiele

Hier ist ein Beispiel für das Setzen von Werten in beide Felder:

Sub Beispiel()
    Dim IEApp As Object
    Set IEApp = CreateObject("InternetExplorer.Application")

    IEApp.Visible = True
    IEApp.Navigate "https://beispielseite.beispiel.net"

    Do While IEApp.Busy Or IEApp.readyState <> 4: DoEvents: Loop

    With IEApp.Document
        .getElementById("input1").Value = "Test Input"
        .getElementById("textarea1").Value = "Test Textarea"
    End With

    IEApp.Quit
    Set IEApp = Nothing
End Sub

Tipps für Profis

  • Fehlerbehandlung einfügen: Verwende On Error Resume Next, um Fehler zu ignorieren und den Code weiterhin auszuführen. Dies kann hilfreich sein, wenn du mit mehreren Elementen arbeitest.

  • Verwende HTMLDocument: Wenn du die Microsoft HTML Object Library referenzierst, kannst du die Vorteile des Intellisense nutzen, was die Programmierung erheblich erleichtert.


FAQ: Häufige Fragen

1. Kann ich auch andere HTML-Elemente mit VBA ansprechen?
Ja, du kannst alle HTML-Elemente ansprechen, solange du die richtigen IDs oder Namen verwendest.

2. Was ist der Unterschied zwischen HTMLInputElement und HTMLTextAreaElement?
HTMLInputElement wird für Eingabefelder verwendet, während HTMLTextAreaElement speziell für mehrzeilige Texteingaben (Textareas) gedacht ist.

3. Wo finde ich die IDs für HTML-Elemente?
Du kannst die IDs der HTML-Elemente in der Seitenquelltextansicht deines Browsers finden. Rechtsklicke auf das Element und wähle „Untersuchen“ oder „Element untersuchen“.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige