Druckbereich für Grafiken per VBA automatisch fest

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Druckbereich für Grafiken per VBA automatisch fest
von: Benny
Geschrieben am: 19.08.2015 12:09:30

Hallo zusammen,
ich erstelle eine große Excel Datei wo ich per Hyperlink auf Detailblätter verweise in denen fast überwiegend nur Grafiken abgelegt sind.
Der Druckbereich soll per VBA definiert werden da jedes Blatt seine eigene Größe hat.
Das Problem ist nun wie folgt:
Dadurch das die Grafiken den Text bei weitem in jede Richtung überragen wird der Druckbereich nur automatisch bis zum Text und nicht bis an den Rand der Grafik definiert.
Manuell ist das kein Problem aber dadurch das sich die Grafiken regelmäßig ändern benötige ich dafür ein Makro.
Es wäre phantastisch wenn jemand von Euch Spaß daran hätte sich dieses Problems anzunehmen.
Vorab vielen Dank für Eure Unterstützung.
beste Grüße
Benny

Bild

Betrifft: Gedankenspielereien
von: Michael
Geschrieben am: 19.08.2015 16:59:13
Hi Benny,
die "Detailblätter" sind Excel-Datein bzw. - Blätter?!
Ich nehme an, daß Du keine Bilder auf x Ausdrucke zerstückeln möchtest, so daß Du sicher printToFit auf 1 Seite eingestellt hast.
Das führt bei sehr großen Grafiken aber dazu, daß evlt. auch vorhandener Text auf unlesbar kleine Größe eingedampft wird.
Was hältst Du von dem Ansatz, die Grafiken auf eine passende Größe zu skalieren? Dann kannst Du nämlich mit konstantem Druckbereich arbeiten.
Setz das Makro mal in ein Tabellenblatt, in dem eine Grafik vorhanden ist und ändere den Namen der Grafik (in der Variablen grafik) entsprechend ab. Die Ausgabe erfolgt im Direktfenster (VB-Editor: Strg+g oder unter Ansicht/...).
Der Code:


Option Explicit
Sub GrafikResize()
Dim grafik As String
Dim ist_x As Double, faktor As Double
Const max_x As Double = 600
grafik = "Bild 2"
' Originalgröße der Grafik einstellen:
Shapes(grafik).ScaleHeight 1, msoTrue
Shapes(grafik).ScaleWidth 1, msoTrue
' und ausgeben:
Debug.Print "Originalgröße:"
Debug.Print Shapes(grafik).Height
ist_x = Shapes(grafik).Width
Debug.Print ist_x
' Größe ändern
faktor = max_x / ist_x
Debug.Print "Und nach Änderung:"
Shapes(grafik).ScaleHeight faktor, msoTrue
Shapes(grafik).ScaleWidth faktor, msoTrue
Debug.Print Shapes(grafik).Height
Debug.Print Shapes(grafik).Width
End Sub
Die Ausgabe bei meiner nächstbesten Beispielgrafik sieht so aus:
Originalgröße:
 576 
 768 
Und nach Änderung:
 449,25 
 599,25
Eine ggf. sinnvolle Abfrage in y-Richtung überlasse ich Dir.
Schöne Grüße,
Michael

Bild

Betrifft: AW: Gedankenspielereien
von: Benny
Geschrieben am: 20.08.2015 09:01:20
Hallo Michael,
vielen Dank für die schnelle Rückantwort.
Leider reicht mein Excel Wissen wahrscheinlich nicht aus um Deine Rückantwort zu verstehen. Ich habe auch das Gefühl, dass ich wahrscheinlich mein Problem nicht konkret genug beschrieben habe, deshalb versuche ich es noch einmal.
Es gibt ein HAUPT Tabellenblatt wo div. Einträge vorhanden sind. In diesem HAUPT Tabellenblatt gibt es wiederum einige Zellen wo ich einem Rahmen ein Makro zugeordnet habe, damit der User darüber in ein anderes Tabellenblatt springen kann.

Private Sub Goto2FA()
    If Not Sheets("2FA").Visible Then
       Sheets("2FA").Visible = True
    End If
    Sheets("2FA").Select
    Range("A1").Select
End Sub
In diesen ca. 50 Tabellenblättern sind überwiegend Grafiken (*.png) eingefügt worden, die nur eine kleine Text-Überschrift haben.
Jetzt kommt das eigentliche Problem.
Wenn ich einen Druckbereich festlegen möchte in einem Tabellenblatt wo NUR Text vorhanden ist dann kann ich den äußeren Druckbereich über "Strg. + Shift + Ende" definieren.
Wie kann ich einen Druckbereich automatisch per VBA definieren, wenn die Grafiken außerhalb des o.g. Druckbereich sind, sie aber zu dem Ausdruck dazu gehören?
Dieses Makro sollte am besten universal für alle 50 + n Tabellenblätter funktionieren und die Auswahl anbieten es in DIN A4 hoch/quer und DIN A3 hoch/quer ausdrucken zu können.
Ich hoffe ich habe mich jetzt deutlicher ausgedrückt und hoffe das Du mir trotzdem hilfst.
Vielen Dank für Deine Mühe.
beste Grüße
Benny

Bild

Betrifft: Gedankenspielereien - eher Logik als Excel
von: Michael
Geschrieben am: 20.08.2015 13:43:57
Hi Benny,
es geht (erst einmal) nicht direkt um "Excel-Wissen", sondern um Logik.
Ich habe Dir mal ne Datei mit Grafiken erstellt, mit einigem Text im ersten Blatt.
Sieh Dir bitte die Kommentare und die dazugehörigen Blätter *und die jeweilige Seitenansicht* mal an.
Ich hoffe doch, daß es so weit verständlich ist.
*Wenn* Du überhaupt mit einer Skalierung der Bilder einverstanden bist, können wir über die Programmierung reden.
Datei: https://www.herber.de/bbs/user/99710.xls
Schöne Grüße,
Michael

Bild

Betrifft: Nachtrag
von: Michael
Geschrieben am: 21.08.2015 14:27:22
Hi Benny,
hast Du Dir die Datei angesehen und begriffen, worauf ich hinaus möchte?
Bitte stelle Fragen, wenn Dir etwas unklar ist.
Drucken IST leider ein relativ komplexes Thema, und ich bemühe mich, Dir zunächst einmal verständlich zu machen, worauf überhaupt zu achten ist, *bevor* man das Programmieren beginnt.
Für sehr hochwertige Grafiken ist Excel für meinen Geschmack eh nicht geeignet; in besserer Qualität können sie mit reinen Grafikprogrammen gedruckt werden.
Das wiederum kann man auch von Excel bzw. via Batch-Datein steuern; siehe dazu auch den heutigen Thread: https://www.herber.de/forum/archiv/1440to1444/t1443560.htm#1443560
Irfanview kostet nix und ist für die Steuerung "von außen" bestens geeignet: http://www.irfanview.de/
Schöne Grüße,
Michael

Bild

Betrifft: AW: Nachtrag
von: Benny
Geschrieben am: 24.08.2015 11:26:18
Hallo Michael,
sorry das ich mich nicht gemeldet hatte aber ich war beruflich unterwegs.
Es ist prima das Du Dich bemühst mir etwas zu erklären, aber ich glaube immer noch das wir am Thema vorbeischreiben.
Ich habe ein Tabellenblatt worin sich Grafiken befinden. Die meisten sind SnapShots aus PDF oder Worddateien Dateien. Wenn ich davon 2 oder 3 auf einem Tabellenblatt eingefügt habe übersteigt es meistens den normalen DIN A4 Druckbereich.
Mit einfachen Tastenkombinationen kann man den max. Druckbereich ermitteln wenn es sich um Text handelt. Ich möchte lediglich wissen ob es so etwas auch für Grafiken gibt.
Soll bedeuten, ich gehe in mein Tabellenblatt drücke irgendwelche Tastenkombinationen oder lasse das durch ein Makro machen und schwups kommt der Inhalt entweder auf A4 oder A3 auf den Drucker heraus. Mehr nicht. Ich brauch dafür kein Grafikprogramm und auch keine hoch komplizierten Berechnungen. Es muss einfach nur lesbar ausgedruckt werden.
Kannst Du mir immer noch dabei helfen oder ist das zu einfach für Dich?
beste Grüße
Benny

Bild

Betrifft: Na, dann so
von: Michael
Geschrieben am: 25.08.2015 21:02:52
Hi Benny,
hier die grundsätzliche Logik; stecke den Code bitte in ein Modul:

Option Explicit
Sub PA_Anpassen_Schleife()
Dim shp As Shape
Dim a As Variant
Dim s As String
Dim maxr&, maxc&, r&, c&
Dim sh As Worksheet
For Each sh In Worksheets
  s = sh.PageSetup.PrintArea
  If Len(s) < 5 Then
    MsgBox "PrintArea in Tabellenblatt " & sh.Name & " paßt nicht"
   Else
    a = Split(s, ":")
    maxr = sh.Range(a(1)).Row
    maxc = sh.Range(a(1)).Column
    For Each shp In sh.Shapes
      If shp.Type = 13 Then
         r = shp.BottomRightCell.Row
         c = shp.BottomRightCell.Column
         If c > maxc Then maxc = c
         If r > maxr Then maxr = r
      End If
    Next
    MsgBox "Tabellenblatt:      " & sh.Name & vbLf & _
           "Printarea original: " & s & vbLf & _
           "Printarea neu:      " & a(0) & ":" & sh.Cells(maxr, maxc).Address
  End If
Next
End Sub
Happy Exceling,
Michael

Bild

Betrifft: AW: Na, dann so
von: Benny
Geschrieben am: 26.08.2015 09:47:16
Hallo Michael,
so langsam scheinen wir uns zu nähern. Zumindest gibt es jetzt schon mal eine Routine die einen Output liefert, wenn es auch nur Message Boxen (siehe Download) sind :-).
Deine Routine durchläuft alle 56 offenen Tabellenblätter und eruiert ob Sie anscheinend druckbar sind oder nicht.
Es wäre prima wenn diese Routine nur jeweils immer das aktive Tabellenblatt oder die aktivierten Tabellenblätter berücksichtigt. Des Weiteren wäre es angenehm wenn die Auswahl zwischen A3 und A4 möglich wäre.
Leider druckt Deine Routine nicht. Die Fehlermeldung habe ich Dir hier mit angehangen (siehe Download).
Weiterhin vielen Dank für Deine Ausdauer.
beste Grüße
Martin

Bild

Betrifft: AW: Na, dann so
von: Benny
Geschrieben am: 26.08.2015 09:49:34
Sorry - hier nun auch die beiden Dateien :-).
https://www.herber.de/bbs/user/99831.zip

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Druckbereich für Grafiken per VBA automatisch fest"