Excel VBA - Ansicht auf jedem Rechner gleich machen?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

OOps. Wie ich grade feststelle gibt es doch dieses Event.

Bild zum Beitrag

In diesem könnte man nun den Code unterbringen, der Skaliert UND auch die
Spalten und Zeilen so auslegt, dass diese den Druckbereich darstellen.
Hier mal noch Code der den Druckbereich ausrichtet als Beispiel. (ggf auf deine Bedürfnisse anpassen)
'    Set ActiveSheet.HPageBreaks(1).Location = Range("A5")
'    Set ActiveSheet.VPageBreaks(1).Location = Range("Q1")

 - (Microsoft Excel, VBA)
fx8350 
Fragesteller
 12.11.2020, 19:51

Hi, aber auch hier würde es doch nur wirken, wenn man auf Drucken geht?

Ich habe aktuell dieses hier in jedem Tabellenblatt:

Private Sub Worksheet_Activate()
    With ActiveSheet.PageSetup
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    End With
End Sub

Das Problem ist halt, dass ich möchte, dass dieser Code beim Öffnen des Dokuments und dann für alle Tabellenblätter (auch die ausgeblendeten) oder zumindest dann beim aktivieren eines Tabellenblatts, ausgeführt wird.

Denn die Seitenansicht soll beim Laden direkt richtig angezeigt werden, damit es nicht irritiert.

'    Set ActiveSheet.HPageBreaks(1).Location = Range("A5")

'    Set ActiveSheet.VPageBreaks(1).Location = Range("Q1")

Muss ich da die komPlette Range eingeben (z. B. "A5:A10")?

0
IchMalWiederXY  13.11.2020, 08:22
@fx8350

mmhh. Warum in jedem Tabellenblatt?
Du kannst im "Workbook" ebenfalls jedes Event greifen und dort prüfen für welches Tabellenblatt es nötig war.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    With Sh.PageSetup
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    End With
End Sub

1
fx8350 
Fragesteller
 13.11.2020, 09:13
@IchMalWiederXY

Das soll auf alle Tabellenblätter angewendet werden. Die sind alle gleich vom Layout.

0
IchMalWiederXY  13.11.2020, 09:16
@fx8350

eben. dann genügt es das Event im Workbook "einmal" zu programmieren und zu schauen, "wo man gerade ist". Dieser Code würde sich dann auch automatisch um weitere Blätter kümmern, die ggf mal ergänzt werden. 'Keine' VBA Anpassung nötig.

1
fx8350 
Fragesteller
 13.11.2020, 09:19
@IchMalWiederXY

Also der letzte Code von Dir ist für alle Tabellenblätter gültig?

0
IchMalWiederXY  13.11.2020, 09:23
@fx8350

Ich habe es nicht selbst getestet. Sollte aber funktionieren.
ABER es muss im "Workbook" Object hinterlegt werden, nicht auf einem Tabellenblatt.
UND die Workbook Events werden immer zuerst ausgeführt.
Wenn du also einen Breakpoint setzt wirst du feststellen, dass man es im Workbook landet, alles dort abgearbeitet wird um anschließend noch den individuellen Sheet Source auszuführen.
Ich Schlage also vor. Lösche den Code in Tabelle1
Setze den Code in Workbook um.
Löse das "ActivateSheet" für Tabelle1 aus und prüfe was passiert.

0
fx8350 
Fragesteller
 13.11.2020, 09:24
@IchMalWiederXY

Habe ich, aber ich kann es nicht testen, weil bei mir die Ansicht inzwischen passt. :-)

0
fx8350 
Fragesteller
 13.11.2020, 09:26
@fx8350

Habe gerade woanders geprüft und es scheint zu funktionieren! Danke.

1
fx8350 
Fragesteller
 13.11.2020, 09:33
@fx8350

Geht leider doch nicht... auf der Ansicht "Seitenlayout" wird auf zwei Seiten geteilt.

0
fx8350 
Fragesteller
 13.11.2020, 09:36
@fx8350

Sogar auf 4 Seiten. Wenn man einmal auf Drucken geht und dann wieder zurück dann ist die Ansicht auch skaliert. Wie bekomme ich hin, dass die Ansicht beim Laden skaliert wird?

0
fx8350 
Fragesteller
 13.11.2020, 12:47
@IchMalWiederXY

Hm. So etwa in den dort bestehenden Code einfach einbinden?

Private Sub Workbook_Open(ByVal Sh As Object)
    Dim msg As String
    With Sh.PageSetup
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    End With
    Worksheets(1).Activate
    msg = MsgBox("Soll das Eingabeformular gestartet werden?", vbYesNo, "")
    If msg = vbYes Then
    UserForm1.Show
    Else
    Exit Sub
    End If
End Sub
0
fx8350 
Fragesteller
 13.11.2020, 13:44
@fx8350

Nö, geht nicht. Ich weiß einfach nicht, wie ich das machen soll...

0

Excel selbst weiß erstmal nicht von dem Zieldrucker.
Wenn nun jemand mit seinem Rechner das Excel öffnet sind dort diverse Drucker
(lokal oder Netzwerk) hinterlegt. Erst im Moment der Druckerwahl ist also klar auf welchen Treiber skaliert werden muss.
Mir ist kein Befehl bekannt der "OnPrinter_Selection' nochmal Änderungen am Sheet zulässt.
Ggf hilft es bereits im WorkbookOpen_Event
Hardcoded den Druckbereich auf die gewünschten Zeilen und Spalten zu "rücken".
Dies kann man per Makroaufzeichnung erledigen und dann im Event hinterlegen.
Bei Bedarf kann ich aber auch nen Beispiel Code posten.

fx8350 
Fragesteller
 12.11.2020, 16:46

Es hat wohl mit der Skalierung zu tun und ich habe nun folgendes eingesetzt:

Private Sub Worksheet_Activate()
    With ActiveSheet.PageSetup
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    End With
End Sub

Es funktioniert halt aber dennoch erst, wenn man auf Drucken geht.

Aber wenn man das öffnet und die Standardansicht ist das Seitenlayout, wird es eben zunächst falsch angezeigt.

Habe es auf der Arbeit angepasst und Zuhause geöffnet und nun sind Zeilen nicht mehr alle in der Ansicht, wodurch 2 Seiten angezeigt werden.

Es muss doch irgendwie möglich sein, dass im Hintergrund dieser Druckmodus mit Skalierung gestartet wird, damit sich die Ansicht aktualisiert, oder?

1

ggf einmal für jedes Tabellenblatt in den Druckereinstellungen festlegen, dass es auf eine Seitenbreite skaliert werden soll.

fx8350 
Fragesteller
 11.11.2020, 09:27

Das war bereits eingestellt. Scheint nicht zu funktionieren.

1
GutenTag2003  11.11.2020, 10:17
@fx8350

Hast Du mal geprüft, ob unterschiedliche Schriftarten genutzt werden ?

2
fx8350 
Fragesteller
 11.11.2020, 11:55
@GutenTag2003

Da es sich um eine Vorlage handelt, die jeder benutzen soll wird auch nichts geändert. Wenn man aber die Ansicht von Umbruchvorschau auf Normalansicht hin und her schaltet, dann scheint es zumindest beim Kollegen wieder zu passen. Echt doof, wenn man das immer machen muss.

1

Wenn du im Workbook Open Event die Dinge anstoßen willst ist wieder etwas mehr Arbeit nötig, da im Open event das SheetObject NICHT vorhanden ist.

Bild zum Beitrag

 - (Microsoft Excel, VBA)
fx8350 
Fragesteller
 13.11.2020, 16:21

Ok. So wie es jetzt ist kann man nur nicht damit arbeiten. :-(

0
fx8350 
Fragesteller
 15.11.2020, 15:05

Kannst Du mir vielleicht helfen, wie ich beim Öffnen der Tabelle bzw. der Tabellenblätter eine Aktualisierung vom Seitenlayout vornehme? Wenn ich manuell in die Druckansicht gehe und zurück dann passt ja auch das Seitenlayout wieder. Wie kann ich das automatisieren? Da wäre ich sehr dankbar, da das meine letzte Aufgabe ist, die ich lösen möchte.

0
IchMalWiederXY  15.11.2020, 18:39
@fx8350

Ich dachte dies hätte ich schon. Im Workshop Chance event den Code wie bereits beschrieben einbauen.

UND

Im workbook_open Event den anderen Vorschlag. Grundsätzlich hast du den funktionierenden Code. Nun gilt es diesen mit den verschiedenen Events zu koppeln.

Dies kriegst du hin :-)

0
fx8350 
Fragesteller
 15.11.2020, 19:15
@IchMalWiederXY

Echt? Das Ich habe bereits anderen Code im Workbook_Open Event:

Private Sub Workbook_Open()
    Dim msg As String
    Worksheets(1).Activate
    msg = MsgBox("Soll das Eingabeformular gestartet werden?", vbYesNo, "")
    'Worksheets("Fertigungsprüfplan Seite 1").[BA5] = Environ$("USERNAME")
    If msg = vbYes Then
    UserForm1.Show
    Else
    Exit Sub
    End If
End Sub

Wenn ich Deinen Code einfüge erhalte ich eine Fehlermeldung.

Also was unten steht funktioniert dann nicht:

Private Sub Workbook_Open(ByVal Sh As Object)
    Dim msg As String
    With Sh.PageSetup
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    End With
    Worksheets(1).Activate
    msg = MsgBox("Soll das Eingabeformular gestartet werden?", vbYesNo, "")
    If msg = vbYes Then
    UserForm1.Show
    Else
    Exit Sub
    End If
End Sub
0
IchMalWiederXY  15.11.2020, 22:40
@fx8350

Dieser Code konnte nicht funktionieren, da workbook_open keine Parameter hat.nur (). Dann kommt mein Beispiel mit der schleife ins Spiel. Was macht die üserform ?

1
fx8350 
Fragesteller
 16.11.2020, 17:21
@IchMalWiederXY

Die Userform macht sehr viel... Glaube da kann ich nicht ins Detail gehen, das würde sehr lange dauern....

Uns hat auch zu viele Zeichen um das hier einzufügen. Die UserForm hat ein paar Buttons und Textfelder sowie Label.

0