Word-VBA: Wieso funktionieren diese kleinen Makros nicht auf allen PCs?

Gaby Salvisberg

Super-Moderator
Sali alle

Dieses Word-Makro sollte den Zoom-Faktor der aktuellen Dokumentansicht um 10% erhöhen:

Code:
Sub ZoomIn()
Dim ZFak As Integer
ZFak = Int(ActiveWindow.ActivePane.View.Zoom.Percentage + 10)
If ActiveWindow.ActivePane.View.Zoom.Percentage > 490 Then Exit Sub
ActiveWindow.ActivePane.View.Zoom.Percentage = ZFak
End Sub

Und dieses sollte sie um 10% verringern:
Code:
Sub ZoomOut()
Dim ZFak As Integer
ZFak = Int(ActiveWindow.ActivePane.View.Zoom.Percentage - 10)
If ActiveWindow.ActivePane.View.Zoom.Percentage < 20 Then Exit Sub
ActiveWindow.ActivePane.View.Zoom.Percentage = ZFak
End Sub

Lustig nun: Während das auf meinem Arbeits-PC mit Win7 (jaaa, ändert nächstens) und Office 365/2019 wunderbar funktioniert, haut es mir auf dem Testrechner (gleiches Office, aber Win10) eine Fehlermeldung um die Ohren: "Laufzeitfehler 91 Objektvariable oder With Blockvariable nicht festgelegt". Beim Einzelschritt-Debuggen sehe ich, dass in beiden die Zeile "Dim ZFak As Integer" übersprungen wird, wobei es auf dem einen PC trotzdem funktioniert und auf dem anderen nicht.

Gibts eine plausible Erklärung? Fehlt auf dem anderen Rechner etwas? Liegt es an einer Einstellung?

Die Inspiration zum Makro, das ich aber auf eigene Bedürfnisse angepasst habe, erhielt ich von dort; allerdings funktionieren auch die dortigen Beispiele auf dem Testrechner nicht; mit dem gleichen Problem.

Herzliche Grüsse
Gaby
 

nochEinAndreas

Stammgast
2 Hinweise

Hallo Gaby,

1. Ich habe die Codes bei mir (Windows 10, Office 2019) auch mal getestet. Sie laufen ohne Fehler. Es liegt also nicht am Windows.
2. Dass die Dim-Anweisung im Debugger "übersprungen" wird, ist normal. Der Debugger zeigt nur die ausführbaren Zeilen an. Die Variable wird aber trotzdem dimensioniert.

Ich probiere mal noch ein Bisschen weiter. Falls ich den Fehler noch irgendwie erzeugen kann, melde ich mich.

Grüße, Andreas
 

Gaby Salvisberg

Super-Moderator
Hallo Andreas

Nun - zuhause - ebenfalls an einem Win10-PC mit Office 365/2019: Wieder derselbe Fehler.

Gibt es eventuell irgend eine (evtl. veraltete) Einstellung in Bezug auf Makros, die ich auf meinem Arbeits-PC in den letzten Jahren mal gemacht haben könnte, aber auf den beiden relativ jungfräulichen Test- und Heim-PCs nicht? Irgend eine generelle Makro-Deklaration, die irgendwo verborgen sein könnte?

[edit] Oder etwas im VBA-Fenster unter Extras/Verweise? Da sind hier nur "Visual Basic for Applications", "Microsoft Word 16.0 Object Library", "OLE Automation" und "Microsoft Office 16.0 Object Library" angehakt, Rest ist inaktiv (kann grad nicht schauen, wie das auf dem Arbeits-PC im Büro aussieht).

Herzliche Grüsse
Gaby

[edit]
Oh. Habe nun was gefunden. So scheint es zu gehen, wie ich via https://docs.microsoft.com/en-us/office/vba/api/word.zoom.percentage erfahren habe:

Code:
Sub ZoomIn()
Dim ZFak As Integer
ZFak = Int(ActiveDocument.ActiveWindow.View.Zoom.Percentage + 10)
If ActiveDocument.ActiveWindow.View.Zoom.Percentage > 490 Then Exit Sub
ActiveDocument.ActiveWindow.View.Zoom.Percentage = ZFak
End Sub
Code:
Sub ZoomOut()
Dim ZFak As Integer
ZFak = Int(ActiveDocument.ActiveWindow.View.Zoom.Percentage - 10)
If ActiveDocument.ActiveWindow.View.Zoom.Percentage < 20 Then Exit Sub
ActiveDocument.ActiveWindow.View.Zoom.Percentage = ZFak
End Sub
Die Frage ist nun: Falls ActiveWindow.ActivePane.View.Zoom.Percentage falsch war, und ActiveDocument.ActiveWindow.View.Zoom.Percentage richtig ist - wieso hat es dann auf meinem Arbeits-PC (und offenbar auch auf deinem Gerät) trotzdem funktioniert? :confused:

Muss morgen nochmals gegenchecken, obs nun auf allen erreichbaren Geräten läuft.

Herzliche Grüsse
Gaby
 
Zuletzt bearbeitet:

nochEinAndreas

Stammgast
Das einzige, was ich mir vorstellen könnte ....

Bei Office 365 werden ja immer wieder Updates eingespielt (wenn ich das richtig verstanden habe). Vielleicht hast du auf dem einen Rechner schon ein Update, das die ältere Syntax (Objekte mit anderen Eigenschaften) nicht mehr versteht.

Grüße, Andreas
 

exro

Stammgast
Nun nicht nur die Office-Versionen sondern auch die VBA Interpreter habe sich in den letzten Jahren verändert.
Habe selber eine Access-DB die per VBA die Daten in ein Worddokument schreibt, in Excel-Grafiken erstellt und einfügt.
Ursprünglich entwickelt unter Office 2003 musste ich den Code für Office 2007 massiv anpassen. Seither waren keine gröberen Code-Anpassungen aufgrund der Office Version von Nöten.

Vor Office 2010 wurden die Grafiken direkt im Worddokument erstellt, was aber wegen eines Word 2010 Bugs dann nicht mehr möglich war. (Word2010 kann keine Bilder/Grafiken nahtlos aneinander einfügen. Ab Word 2013 geht dies wieder.) Seither erstellt Excel die Grafik und fügt diese dann ins Worddokument.

Besonders "schmerzhaft" in Erinnerung bleibt mir, dass ich seit Office 2007 Formulare nicht mehr mit dem Befehl =[Forms]! aufrufen konnte. Hat 3 Wochen gedauert, bis ich das Problem erkannt und seither Formulare eben Deutsch aufrufen muss. =[Formulare]!
Keine Ahnung was passieren würde, wenn mein Makro mal auf einem "französischen oder englischen" Office laufen müsste...

Bin vor 3 Monaten zudem auf eine Zeile im Code gestossen, mit einem fehlerhaften Datenabruf innerhalb einer Tabelle, dennoch lief das Makro bei allen Kunden ohne Probleme und korrekt...
(Meine Kunden setzen sowohl Win7 und 10 ein (inkl. Citrix-Systeme). Office Versionen 2010 bis 2019, 365 sind alle im Einsatz)

Zudem gibt's bei einigen Kunden auch gelegentlich einen Bug beim einfügen von Tabellen aus der Windows-Zwischenablage, den ich mit Office 2016 nicht reproduzieren kann. Ob's nun an der Office Version , Windows Version und Patch-Stand liegt oder einfach daran, dass mein PC mehr Arbeitsspeicher hat, lasse ich mal offen...


Code-Ausschnitt als Bsp.
Code:
Dim WordObj As Object
...
    WordObj.ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitBestFit

Lange Rede, kurzer Sinn. Eigentlich staune ich, dass deine erste Variante überhaupt auf einigen Systemen läuft. Warum genau wird dir wohl nur MS selber mitteilen können, wenn überhaupt.

Verweise wären eine Möglichkeit. (siehe meine aktiven Verweise im Bild unten) Denke jedoch nicht, dass dies die Ursache ist. Eher wohl ungleicher Update-Stand der involvierten PC's.

Egal. Wenn ich auf solche "Merkwürdigkeiten" in VBA stosse, verfluche in kurz Bill Gates und suche eine Lösung, die auf "allen" Systemen läuft. Detaillierte Ursachenforschung verbraucht nur unnötig Ressourcen... ;)
 

Anhänge

  • Verweise.png
    Verweise.png
    23,9 KB · Aufrufe: 4
Zuletzt bearbeitet:
Oben