Anzeige
Archiv - Navigation
1928to1932
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
Bild per VBA in Kopzeile einbinden
08.05.2023 18:20:17
Wolle

Hallo zusammen,

wenn ich mit folgendem Code ein Bild in die Kopzeile Einfüge ist das Ergebnis auf unterschiedlichen Seiten nicht gleich.

With ActiveSheet.PageSetup
                            .LeftHeader = ""
                            .CenterHeader = ""
                            .RightHeaderPicture.Filename = "C:\Users\Benutzer1\in\allg. Dokumente - Dokumente\Vorlagen\Logo_klein.jpg"
                            .RightHeader = "&G"
                            '.RightHeaderPicture.LockAspectRatio = True
                            .RightHeaderPicture.Height = 480
                            .RightHeaderPicture.Width = 184
                            .LeftFooter = ""
                            .CenterFooter = "&""Arial,Fett""&P von &N"
                            .RightFooter = ""
                        End With


Kann mir das einer erklären, und kann man das irgendwie abstellen? Natürlich soll das Logo immer die gleiche Größe haben.

Die Tabellenblätter haben nicht den gleichen Inhalt und unterschiedlich viele Zeilen und Spalten, aber es sollte doch trotzdem Möglich sein das Logo immer am selben Platz mit der selben Größe zu haben, oder?

Gruß, Wolle

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bild per VBA in Kopzeile einbinden
08.05.2023 18:41:48
Daniel
Hi
schau mal auf die Zoomstufe im Ausdruck.
ist die immer gleich?
Wenn nein, dann probier mal ob du die Größe der Grafik antiproportional zur Zoomstufe anpassen kannst (50% Zoom = 200% Bildgröße)
Gruß Daniel


AW: Bild per VBA in Kopzeile einbinden
08.05.2023 18:48:37
Wolle
OK, das wird es sein, kann ich die Zoomstufe per VBA auslesen?

Gruß, Wolle


AW: Bild per VBA in Kopzeile einbinden
08.05.2023 18:58:38
Daniel
das fragst du jetzt nicht ernsthaft, oder?
wie hast du es geschafft, das Makro zu schreiben, mit dem das Bild eingebunden wird?
Jungfrauengeburt?

ok, du weißt, wie du Eigenschaften verändern kannst, sonst hättest du dieses Makro nicht schreiben können.
Wenn man eine Eigenschaft setzen kann mit ...Eigenschaft = "xxx" dann kann man sie immer auch genauso auslesen, beispielsweise für die Ausgabe in einer Messagebox:
Msgbox Eigenschaft
oder im direktfenster
Debug.print Eigenschaft
oder für die weitere Verwendung in eine Variable einlesen.
x =  Eigenschaft
Wenn man jetzt nicht weiß, wie eine bestimmte Eigenschaft genau heißt, dann kann man sich damit behelfen, dass du diese Eigenschaft von Hand veränderst und das mit dem Recorder aufzeichnest.
dann schaust du dir den aufgezeichneten Code an und suchst nach einer Eigenschaft, die in Frage kommen könnte, hier also irgendwas mit "Zoom". Oder du suchst nach dem eingstellten Wert, wenn du die Zoomstufe auf 79% gestellt hast, und im aufgezeichneten Code taucht an einer Stelle die 79 auf, dann spricht einiges dafür, dass diese Eigenschaft dann die Zoomstufe ist (muss natürlich geprüft werden).
Oder man schaut einfach mal in die Hilfe. Die bekommt man ja auf Tastendruck (F1).

Gruß Daniel


Anzeige
AW: Bild per VBA in Kopzeile einbinden
08.05.2023 19:50:55
Wolle
Grundsätzlich verstanden,

leider liefert mir mir

Zoomfaktor = ActiveSheet.PageSetup.Zoom
keinen Nutzbaren wert zurück, da im voherigen Verlauf Zoom auf False gesetzt wird und die Tabellen mit alle Spalten auf einer Seite Darstellen formatiert werden.


                .Zoom = False
                .FitToPagesWide = 1
                .FitToPagesTall = False


AW: Bild per VBA in Kopzeile einbinden
08.05.2023 19:58:21
Wolle
Kann ich anhand der genutzten Range selbst den Zoom errechnen und im Makro vorgeben ohne:

.
                .Zoom = False
                .FitToPagesWide = 1
                .FitToPagesTall = False


?


Anzeige
AW: Bild per VBA in Kopzeile einbinden
08.05.2023 20:45:50
Daniel
HI
du kannst den Zoom auf einen bestimmten Wert setzen

.Zoom = 75
.FitToPagesWide = False
.FitToPagesTall = False
das was man von Hand macht, nämlich den Zoom automatisch einstellen zu lassen (fittopage...) und dann den Zoom abfragen, ifunktioniert ja leider nicht, wie du festgestellt hast.
meine nächste Idee wäre, dass man die Zoomstufe schrittweise verringert, bis man die gewünschte Seitenanzahl hat.
alledings macht das Probleme:
Excel rechnet bei Änderung einer Seiteneinrichung die davon abhänigigen Größen nicht sofort neu. Dazu müsste man entweder sich schon auf der Druckvorschauseite befinden, oder einen Ausdruck starten, oder die PrintCommunikation ein- und ausschalten.
ob man auf die Druckvorschauseite per Code wechseln kann, weiß ich nicht.
einen Ausdruck zu starten wäre nicht gut, und bei einer Preview muss man jedesmal manuell bestätigen.
der Weg über die PrinterCommunication funktioniert, ist aber extrem langsam.
hier mal der Code dazu:
Sub test()
Dim i As Long
With ActiveSheet.PageSetup
For i = 100 To 20 Step -1
    Application.PrintCommunication = False
    .Zoom = i
    Application.PrintCommunication = True
    If ActiveSheet.VPageBreaks.Count = 0 Then Exit For
Next
MsgBox .Zoom
End With
End Sub
funktioniert, ist aber grottig langsam.

was anderes fällt mir grad auch nicht ein.

Gruß Daniel


Anzeige
AW: Bild per VBA in Kopzeile einbinden
09.05.2023 22:22:56
Wolle
Ich habe mir heute mal einen Weg erarbeitet, der für mich funktioniert.

Ich berechne mir quasi ".FitToPagesWide = 1" selber. Das klappt nicht 100 % so wie das Original, aber das sind immer nur wenige Pixel Abweichung.
Daraus gewinne ich einen Zoom Faktor und anschließend Teile ich meine Bildgröße durch den Zoomfaktor und Multipliziere in wieder mal 100.

Ergebnis, dass Logo ist trotz unterschiedlichem Zoom nahezu immer gleich groß.

Zum Schluß schalte ich ".FitToPagesWide = 1" wieder an und Zoom auf False. Für mich funktioniert es wie ich es brauche.
Vielleicht nicht ganz elegant, aber ihr dürft mir gerne Verbesserungsvorschläge geben.

Hier mal mein Code:


ActiveSheet.UsedRange.EntireColumn.AutoFit
            
            Dim Breite As Double
            
            Breite = 0
            
            For T = 1 To LetzteSpalte
            
                Breite = Breite + Cells(1, T).ColumnWidth
            
            Next T
            
            Zoomfaktor = 100 / Breite * 135
            
            If Zoomfaktor > 100 Then Zoomfaktor = 100
            
            With ActiveSheet.PageSetup
                .LeftHeader = ""
                .CenterHeader = ""
                .RightHeaderPicture.Filename = "C:\Users\in\allg. Dokumente - Dokumente\Vorlagen\Logo_klein.jpg"
                .RightHeader = "&G"
                .RightHeaderPicture.Height = 384 / Zoomfaktor * 100
                .RightHeaderPicture.Width = 147.2 / Zoomfaktor * 100
                .LeftFooter = ""
                .CenterFooter = "&""Arial,Fett""&P von &N"
                .RightFooter = ""
            End With
            
            With ActiveSheet.PageSetup
                .Zoom = False
                .FitToPagesWide = 1
                .FitToPagesTall = False
            End With


Anzeige
AW: Bild per VBA in Kopzeile einbinden
10.05.2023 14:20:26
Daniel
auch ne sehr gute Idee...
dazu fallen mir gleich zwei Verbesserungen ein:

1. verwende .Width anstelle von .ColumnWidth
das ist die Breite in Pixeln (ColumnWidth = Anzahl sichbare Zahlen in Standardschrift) und diese kann auch über einen größeren Zellbereich ermittelt werden. Damit solltest du genauer sein, weil auch die Ränder mit berücksichtig werden und du brauchst die Schleife nicht:

Breite = Columns(1).Resize(, letzteSpalte).Width
2. um einen guten Referenzwert für den With-Wert eines Blattes zu bekommen, kannst du ja mal die Spaltenbreite möglichst schmal machen, dann in die Seitenumbruchsvorschau gehen und schauen, wo der Seitenwechsel ist, dann ermittelst du den .Width-Wert für diesen Zellbereich.

damit solltest du dann relativ präzise den notwendigen Zoomfaktor berechnen können.
Gruß Daniel


Anzeige
AW: Bild per VBA in Kopzeile einbinden
10.05.2023 21:00:51
Wolle
Danke Dir, jetzt klappt es noch Besser.

Jetzt kann ich mir den ".FitToPagesWide" Kram ganz sparen und es funktioniert wunderbar.

Gruß, Wolle.

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige