VBA: Screenshot einer Website automatisch erstellen

Website erstellen

Ein Screenshot einer Website lässt sich per Knopfdruck aus Excel oder Word heraus erzeugen – ganz ohne Maus. Nützlich ist das etwa, wenn Sie Preise, Layouts oder Konkurrenzseiten regelmäßig dokumentieren und die Bilder direkt in einer Tabelle sammeln wollen. Der oft zitierte Weg über den Internet Explorer funktioniert allerdings nicht mehr: Microsoft hat den IE am 15. Juni 2022 abgeschaltet, CreateObject("InternetExplorer.Application") scheitert oder leitet auf Edge um. Dieser Beitrag zeigt drei Methoden, die auf einem aktuellen Windows 10/11 tatsächlich laufen – mit vollständigem Code zum Kopieren.

Welche Methode passt zu Ihnen?

  • Headless-Edge oder -Chrome per Shell – die zuverlässigste Variante. Der Browser rendert die Seite unsichtbar im Hintergrund und speichert das Bild als PNG. Keine Zusatz-Bibliothek nötig, da der Browser ohnehin installiert ist.
  • Selenium (SeleniumBasic) – wenn Sie vor dem Screenshot noch interagieren müssen (einloggen, Cookie-Banner klicken, scrollen). Erfordert ein einmalig installiertes Add-in.
  • Alt+Druck als Notlösung – kopiert das gerade sichtbare Fenster in die Zwischenablage. Ohne Zusatzsoftware, aber fragil und nicht für unbeaufsichtigte Läufe geeignet.

Methode 1: Screenshot über Headless-Edge (empfohlen)

Edge und Chrome basieren beide auf Chromium und können per Kommandozeile einen Screenshot erzeugen. Sie starten den Browser im „Headless“-Modus (ohne sichtbares Fenster), er lädt die URL und schreibt eine PNG-Datei. Aus VBA rufen Sie den Befehl mit WScript.Shell auf und warten, bis er fertig ist.

Sub WebseiteScreenshot()
    Dim edge As String, url As String, ziel As String, cmd As String

    edge = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
    url = "https://www.example.com"
    ziel = Environ("TEMP") & "\screenshot.png"

    cmd = """" & edge & """ --headless=new --disable-gpu --hide-scrollbars " & _
          "--screenshot=""" & ziel & """ --window-size=1280,1024 " & _
          "--virtual-time-budget=5000 """ & url & """"

    ' 0 = Fenster unsichtbar, True = warten, bis der Prozess fertig ist
    CreateObject("WScript.Shell").Run cmd, 0, True

    If Dir(ziel) <> "" Then
        ThisWorkbook.Sheets(1).Shapes.AddPicture _
            Filename:=ziel, LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, _
            Left:=10, Top:=10, Width:=-1, Height:=-1
    Else
        MsgBox "Screenshot wurde nicht erstellt – Edge-Pfad und URL prüfen."
    End If
End Sub

Das dritte Argument von .Run (True) sorgt dafür, dass VBA blockiert, bis der Browser die Datei geschrieben hat – erst danach wird das Bild eingefügt. Öffnen Sie den VBA-Editor mit Alt + F11, legen Sie über Einfügen › Modul ein neues Modul an und fügen Sie den Code dort ein.

Wichtige Optionen im Befehl:

  • --headless=new ist die aktuelle Schreibweise. Das alte --headless ohne Zusatz löst in neueren Versionen eine Verwarnung aus.
  • --window-size=1280,1024 legt die Bildgröße fest. Für höher aufgelöste Bilder ergänzen Sie --force-device-scale-factor=2.
  • --virtual-time-budget=5000 gibt der Seite bis zu 5000 ms Zeit, JavaScript und Schriften nachzuladen, bevor der Screenshot fällt.
  • --disable-gpu verhindert schwarze oder leere Bilder auf manchen Systemen.

Für Chrome ersetzen Sie den Pfad durch C:\Program Files\Google\Chrome\Application\chrome.exe.

Das fertige Bild in Excel

Shapes.AddPicture bettet die Grafik mit SaveWithDocument:=msoTrue fest in die Arbeitsmappe ein – sie bleibt also erhalten, auch wenn die PNG-Datei später gelöscht wird. Mit Width:=-1, Height:=-1 wird das Bild in Originalgröße eingefügt. Vermeiden Sie das ältere Pictures.Insert, weil es die Grafik je nach Version nur verknüpft; verschieben Sie die Datei, ist das Bild dann weg.

Methode 2: Selenium für Seiten mit Interaktion

Wenn Sie vor dem Screenshot noch etwas tun müssen – Cookie-Banner wegklicken, einloggen, ein Menü öffnen –, ist ein echter, steuerbarer Browser die bessere Wahl. Dafür gibt es SeleniumBasic, ein VBA-Add-in, das Edge oder Chrome fernsteuert.

Nach der Installation aktivieren Sie im VBA-Editor unter Extras › Verweise die „Selenium Type Library“. Der Screenshot-Code ist dann kurz:

Sub SeleniumScreenshot()
    Dim d As New Selenium.EdgeDriver
    d.Start
    d.Get "https://www.example.com"
    d.Wait 1500                       ' 1,5 s auf Nachladen warten
    d.TakeScreenshot.SaveAs Environ("TEMP") & "\selenium-shot.png"
    d.Quit
End Sub

TakeScreenshot fotografiert den sichtbaren Bereich (Viewport). Für Interaktion nutzen Sie z. B. d.FindElementById("accept").Click, bevor Sie auslösen.

Der Haken: SeleniumBasic wird kaum noch gepflegt, und der mitgelieferte Treiber (msedgedriver bzw. chromedriver) muss zur installierten Browser-Version passen. Da Edge und Chrome sich automatisch aktualisieren, ist ein Versions-Konflikt der häufigste Fehler. Lösung: den passenden Treiber herunterladen und in den Ordner %LOCALAPPDATA%\SeleniumBasic legen.

Methode 3: Alt+Druck ohne Zusatzsoftware

Ist das gewünschte Fenster bereits im Vordergrund, kopiert Alt + Druck das aktive Fenster in die Zwischenablage. Aus VBA:

Sub AktivesFensterKopieren()
    ' Voraussetzung: das Zielfenster ist im Vordergrund
    Application.SendKeys "%{PRTSC}", True   ' % = Alt, PRTSC = Druck-Taste
    DoEvents
    ThisWorkbook.Sheets(1).Paste
End Sub

Das ist der direkte Nachfolger des alten IE-Kniffs, hat aber dieselben Schwächen: SendKeys ist zeitkritisch, das Zielfenster muss den Fokus haben – und die Druck-Taste wird von Windows selbst für die Bildschirmaufnahme abgefangen, bevor sie als normaler Tastendruck bei einer Anwendung ankommt. Deshalb läuft {PRTSC} über SendKeys nicht auf jedem System zuverlässig. Für einmalige, beaufsichtigte Aufnahmen reicht es; für automatisierte Abläufe greifen Sie zu Methode 1.

Typische Fehler und Lösungen

  • CreateObject("InternetExplorer.Application") startet nichts oder öffnet Edge. Der IE ist abgeschaltet. Auf Headless-Edge (Methode 1) umstellen.
  • Keine PNG-Datei wird erzeugt. Prüfen Sie den exakten Edge-Pfad (bei 64-Bit-Windows liegt Edge unter Program Files (x86)), ob der Zielordner existiert und beschreibbar ist, und ob alle Pfade mit Leerzeichen in Anführungszeichen stehen.
  • Das Bild zeigt nur den oberen Seitenbereich. Der neue Headless-Modus fotografiert nur den Viewport. Erhöhen Sie die Höhe in --window-size, oder erzeugen Sie ganzseitige Bilder über das Chrome DevTools Protocol (Page.captureScreenshot mit captureBeyondViewport).
  • Weißes oder halb geladenes Bild. Die Seite braucht mehr Zeit: --virtual-time-budget erhöhen bzw. d.Wait verlängern. Cookie-Banner verdecken den Inhalt – vorher wegklicken (Methode 2).
  • Schwarzes Bild. --disable-gpu ergänzen.
  • Selenium meldet „session not created – version mismatch“. Treiber auf die Browser-Version aktualisieren.

FAQ

Funktioniert der klassische Internet-Explorer-Weg wirklich nicht mehr? Nein. Der Internet Explorer 11 wurde am 15. Juni 2022 endgültig abgeschaltet und ist unter Windows 11 nicht mehr enthalten. Das COM-Objekt lässt sich teils noch erzeugen, die Navigation schlägt aber fehl oder öffnet Edge. Nutzen Sie Headless-Edge.

Wie bekomme ich einen Screenshot der kompletten, scrollbaren Seite? Der einfache --screenshot-Aufruf im neuen Headless-Modus erfasst nur den sichtbaren Bereich. Für die ganze Seite steuern Sie den Browser über das Chrome DevTools Protocol an und rufen Page.captureScreenshot mit captureBeyondViewport: true auf, oder Sie scrollen in Selenium schrittweise und setzen die Einzelbilder zusammen.

Geht das auch mit anderen Office-Programmen? Ja. Der VBA-Code läuft identisch in Word, Access oder Outlook – nur das Einfügen des Bildes unterscheidet sich (in Word etwa über Selection.InlineShapes.AddPicture). Das Erzeugen der PNG-Datei per WScript.Shell bleibt gleich.

Wer tiefer in die Automatisierung einsteigt, findet in unserer Übersicht welche Programmiersprachen 2025 am wichtigsten sind Anhaltspunkte. Und wenn Sie den Browser häufiger aus Windows heraus ansteuern, hilft die Anleitung zur Website-Verknüpfung auf dem Desktop mit Edge.