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

Excel Druckbereich als Screenshot speichern

Excel Druckbereich als Screenshot speichern
Lenni
Moin Excellianer
Das Problem: Eine Tabelle (nur 1 Sheet) soll anderen als Datei (!) zur Ansicht zur Verfügung gestellt werden. Die gesamte Exceldatei ist aufgrund der Makros und weiterer Tabellenblätter zu groß...
Meine Idee ist nun, dieses eine Tabellenblatt mit einem Druckbereich zu Versehen (das ist also schon geschehen) und dann diesen Druckbreich als Screenshot in eine *.jpg-, *.bmp- und/oder *.gif-Datei abzuspeichern.
Ich machte mich auf die Suche und fand schon mal diesen Beitrag hier im Archiv:
https://www.herber.de/forum/archiv/912to916/t915918.htm
...und ich stoße an meine VBA-Grenzen...
  • Ich möchte den Druckbereich von nur 1nem Tabellenblatt als Screenshot/Grafikdatei erstellen.
  • Diese Datei soll in zwei (!) anderen Ordnern extra gespeichert werden.
  • In dem einen Ordner nur mit dem Namen der Exceldatei, in dem anderen Ordner mit dem Dateinamen+ZelleA1+ZelleA2 (...die Zellen A1 und A2 sind in dem betr. Tabellenblatt)
  • Eine in den betreffenden Ordnern bereits vorhandene Datei gleichen Namens soll einfach ohne Nachfrage überschrieben werden

  • Ich bitte um Eure Hilfe. Vielen Dank!
    Gruß
    Lenni
    AW: Excel Druckbereich als Screenshot speichern
    09.08.2011 22:27:55
    Beverly
    Hi Lenni,
    versuche es mal so:
    Sub BereichAlsBildExportieren()
    Application.ScreenUpdating = False
    Range(ActiveSheet.PageSetup.PrintArea).CopyPicture Appearance:=xlPrinter, Format:=xlPicture
    With ActiveSheet.ChartObjects.Add(0, 0, Range(ActiveSheet.PageSetup.PrintArea).Width, Range( _
    ActiveSheet.PageSetup.PrintArea).Height).Chart
    .Paste
    .Export Filename:="C:\Test\" & ThisWorkbook.Name & ".jpg", FilterName:="JPG"
    .Export Filename:="D:\Test\" & ThisWorkbook.Name & Range("A1") & Range("A2") & ".jpg",  _
    FilterName:="JPG"
    .Parent.Delete
    End With
    Application.ScreenUpdating = True
    End Sub
    

    Es wird davon ausgegangen, dass das Tabellenblatt mit dem zu exportierenden Druckbereich das aktive ist.
    Die Namen der Speicherpafde musst du natürlich anpassen.


    Anzeige
    AW: Excel Druckbereich als Screenshot speichern
    09.08.2011 23:06:32
    Lenni
    Moin Karin!
    Vielen Dank für Deinen Code!!! ...ich habe übrigens mittlerweile zu diesem Thema an anderer Stelle hier im Forum noch weitere Codes von Dir (....und Josef Ehrenberger) gefunden: Aber alle funktionieren irgendwie nicht.
    Aber "back to the roots": Dein Code "hakt" an folgender Stelle
    .Export Filename:="F:\X-Testordner\" & ThisWorkbook.Name & ".jpg", FilterName:="JPG"
    und ich erhalte die Fehlermeldung Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler
    Da ich morgen sehr früh raus muss, schau ich hier morgen (späterer Nachmittag) wieder rein.
    Vielen Dank nochmals!
    Gruß
    Lenni
    Anzeige
    AW: Excel Druckbereich als Screenshot speichern
    10.08.2011 07:57:11
    Beverly
    Hi Lenni,
    ich habe den Code jetzt auch speziell noch einmal mit Excel2002 (XP) getestet und kann den Fehler nicht nachvollziehen. Vielleicht solltest du deine Arbeitsmappe mal hochladen.


    AW: Excel Druckbereich als Screenshot speichern
    10.08.2011 08:01:18
    Josef

    Hallo Lenni,
    probier mal.
    ' **********************************************************************
    ' Modul: Modul1 Typ: Allgemeines Modul
    ' **********************************************************************

    Option Explicit

    Sub exportPrintArea()
      Dim lngRet As Long
      Dim strPath1 As String, strPath2 As String
      
      strPath1 = "E:\Temp"
      strPath2 = "E:\Temp\Test"
      
      With Sheets("Tabelle1")
        strPath1 = IIf(Right(strPath1, 1) = "\", strPath1, strPath1 & "\") & _
          Mid(ThisWorkbook.Name, 1, InStrRev(ThisWorkbook.Name, ".") - 1) & ".jpg"
        
        strPath2 = IIf(Right(strPath2, 1) = "\", strPath2, strPath2 & "\") & _
          Mid(ThisWorkbook.Name, 1, InStrRev(ThisWorkbook.Name, ".") - 1) & _
          .Range("A1").Text & .Range("A2").Text & ".jpg"
        
        
        lngRet = RangeToImage(strPath1, .Range(.PageSetup.PrintArea))
        lngRet = RangeToImage(strPath2, .Range(.PageSetup.PrintArea))
      End With
      
      If lngRet = 0 Then
        MsgBox "Druckbereich erfolgreich exportiert"
      Else
        MsgBox "Fehler beim Export"
      End If
    End Sub


    Function RangeToImage(ByVal ImageFile As String, ByRef ImageRange As Object) As Long
      Dim objPict As Object, objChrt As Chart
      Dim strExt As String, bDelPic As Boolean
      
      On Error GoTo ErrExit
      Application.ScreenUpdating = False
      
      RangeToImage = -1
      
      With ImageRange.Parent
        If TypeName(ImageRange) = "Range" Then
          .Activate
          .Range("X20000").Select
          ImageRange.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
          
          .PasteSpecial Format:="Bitmap"
          
          For Each objPict In .Shapes
            If objPict.TopLeftCell.Address(0, 0) = "X20000" Then Exit For
          Next
          
          .Range("A1").Select
          bDelPic = True
        ElseIf TypeName(ImageRange) = "Shape" Then
          Set objPict = ImageRange
        End If
        
        objPict.Copy
        
        Set objChrt = .ChartObjects.Add(1, 1, objPict.Width + 8, objPict.Height + 8).Chart
        
        strExt = Mid(ImageFile, InStrRev(ImageFile, ".") + 1)
        
        objChrt.Paste
        objChrt.Export ImageFile, FilterName:=strExt
        objChrt.Parent.Delete
        If bDelPic Then objPict.Delete
        DoEvents
        Set objPict = Nothing
        Set objChrt = Nothing
        RangeToImage = 0
      End With
      
      ErrExit:
      Application.ScreenUpdating = True
      If Not objChrt Is Nothing Then objChrt.Parent.Delete
      If bDelPic Then If Not objPict Is Nothing Then objPict.Delete
      Set objPict = Nothing
      Set objChrt = Nothing
    End Function



    « Gruß Sepp »

    Anzeige
    AW: Excel Druckbereich als Screenshot speichern
    10.08.2011 16:49:41
    Lenni
    Moin Karin! Moin Josef!
    Vielen Dank für Eure Hilfe!
    Ich habe die "schnell gebastelte" Grund-Datei (die Orginal ist zu groß!) mal hochgeladen. Ich glaube, das ist der bessere Weg.
    Der Kennwortschutz der Tabellenblätter ist: xyz
    Die beiden Zellen für den zu speichernden Bilddateinamen wären "AA8" und "AB8" und liegen im ausgeblendeten Bereich des Tabellenblattes "Wochenplan".
    https://www.herber.de/bbs/user/76108.xls
    Ich habe Eure Vorschläge zwischenzeitlich an anderen Rechnern testen können: Dein Vorschlag, Karin, funktionierte auch unter der neuesten Excel-Version nicht. Es kamen Fehlermeldungen. Dein Vorschlag Josef, lief an allen mir zur Verfügung stehenden Excel-Versionen ohne Fehlermeldungen, exportierte aber keine Bilddateien und es kam Deine MsgBox "Fehlerhafter Export" (Das finde ich übrigens Klasse!).
    Dann habe ich eine Blanko-Datei genommen, einen Druckbereich definiert und Eure Vorschläge "eingebaut": Keine Fehlermeldungen mehr, aber bei kein Bildexport bei Deinem Vorschlag Karin. Bei Josefs Vorschlag kam es nun zu einem Bildexport, aber es waren Blanko-Bilder (obwohl Zellen im Druckbreich ausgefüllt waren).
    Liegt es evtl. am Kennwortschutz meines Tabellenblattes oder daran, dass Zeilen und Spalten im Druckbereich ausgeblendet sind...
    Danke Euch nochmals!
    Gruß
    Lenni
    Anzeige
    AW: Excel Druckbereich als Screenshot speichern
    10.08.2011 17:59:46
    Beverly
    Hi Lenni,
    mein Code funktioniert in deiner Mappe völlig korrekt, wenn vorher der Blattschutz aufgehoben wird: ActiveSheet.Unprotect "xyz". Dies ist das Ergebnis:
    Userbild


    AW: Excel Druckbereich als Screenshot speichern
    10.08.2011 18:41:03
    Lenni
    Danke für Deine erneute Hilfe Karin!
    ...aber bei mir kommt weiterhin die Fehlermeldung: Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler
    Wenn ich dann Debuggen klicke wird mir die erste Zeile   .Export Filename:....   gelb unterlegt angezeigt.
    Den Blattschutz habe ich auch per Code neutralisiert. Bin sehr ratlos. Mache ich irgendwo einen kleinen Flüchtigkeitsfehler... ...was bedeutet diese Fehlermeldung eigentlich genau?!?
    Danke nochmals!
    Gruß
    Lenni
    Anzeige
    AW: Excel Druckbereich als Screenshot speichern
    10.08.2011 19:26:34
    Beverly
    Hi Lenni,
    ich habe den Code (ergänzt durch das Aufheben des Blattschutzes und mit meinen Pfadzuweisungen) in deiner Arbeitsmappe noch einmal mit Excel2010, Excel2003 und Excel2002 (XP) getestet - funktioniert problemlos. Kann es sein, dass die Ordner, die du im Code eingetragen hast, nicht vorhanden sind?


    AW: Excel Druckbereich als Screenshot speichern
    10.08.2011 20:08:10
    Lenni
    Hi nochmals Karin!
    Kann es sein, dass die Ordner, die du im Code eingetragen hast, nicht vorhanden sind?

    ...alles vorhanden!!! Ich habe auch schon Partitionen gewechselt oder bin auf meiner c-Partition verblieben... ...immer diese Fehlermeldung.
    Weiter habe ich auch schon gegoogelt. Bei einigen anderen Excellianern war die Makro-Sicherheit nicht auf niedrig gesetzt und/oder sie hatten "Zugriff auf das VBA-Projekt vertrauen" (unter Optionen/Sicherheit usw.) nicht "angehakt".
    Aber Letzteres ist auch nicht mein Problem... ...in Excel ist bei mir alles diesbezüglich richtig eingestellt. Oder muss da noch was ganz anderes beachtet werden?!?
    Bin nach wie vor sehr ratlos.
    Danke Dir nochmals!
    Gruß
    Lenni
    Anzeige
    AW: Excel Druckbereich als Screenshot speichern
    10.08.2011 21:00:23
    Lenni
    Hi NOCH-nochmals Karin!
    Mir ist noch folgendes Aufgefallen: Die zu exportierende Grafik wird erstellt und visuell über das Tabellenblatt gelegt. Da das Makro jedoch stopt, bleibt sie dort. Der Löschen-Aufruf kommt in Deinem Code ja erst nach dem Exportieren... ...und dieses Exportieren klappt nicht...
    "Was ist denn da bei mir los..."
    Gruß
    Lenni
    AW: Excel Druckbereich als Screenshot speichern
    10.08.2011 22:46:45
    Beverly
    Hi Lenni,
    die letzte Option, die mir einfällt: sind die Ordner, in die exportiert werden soll, schreibgeschützt?
    Noch ein Hinweis: die Makrosicherheit sollte man nie auf "Niedrig" stellen - das höchste der Gefühle sollte "Mittel" sein, denn da wird nachgefragt, ob die Makros aktiviert werden dürfen oder nicht. Bei Einstellung "Niedrig" werden die Makros ohne Rückfrage aktiviert. Dadurch kann möglicherweise großer Schaden an deinem Rechner entstehen, wenn Dateien bösartige Scripte enthalten, die bereits beim Öffnen ausgeführt werden.


    Anzeige
    AW: Excel Druckbereich als Screenshot speichern
    11.08.2011 08:01:19
    Lenni
    Moin Karin!
    An einem anderen Rechner geht es!!! ....konnte es gerade kurz hier ? (will nicht rausfliegen!) testen.
    Es muss an den Einstellungen meines "ZuHauseRechners" liegen!
    Ja das mit den Ordner-Optionen habe ich mir auch schon angeschaut. Aber das ist es auch nicht.
    Danke für Deine Sicherheitshinweise... ...aber mache Dir keine Sorgen: Das ist mir auch alles klar. Ich habe ja nur Fehler gesucht!
    Vielen Dank Dir nochmals! ...und evtl. melde ich mich noch mal.
    ---------------------------
    Moin Josef!
    Auch einem Fremdrechner funktioniert Dein Skript leider nicht. Mir wird das/Dein Diaologfeld "Fehlerhafter
    Export" geöffnet und dann ist nix. Ich habe versucht dieses Ganze nachzuvollziehen, habe allerdings nicht Dein Super-VBA-Level (!).
    Dennoch vielen Dank!
    Gruß
    Lenni
    Anzeige

    84 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige