Zoom / Ansichten / Makros auf Tastenkombinationen legen

Beinahe hätte ich sie vergessen: Bill Gates' Schreibmaschine! Von vielen Nutzern seit seinem ersten Marktauftritt als "Multi-Tool Word" vor ziemlich genau 40 Jahren auch heute noch oft wie die mechanische Vorgängerin genutzt (nur Korrekturfluid sieht man endlich nicht mehr auf den Bildschirmen), ist Textverarbeitung wohl das Essential auf einem PC.
Benutzeravatar
d'r Bastler
Beiträge: 884
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 241 Mal
Danksagung erhalten: 127 Mal

Zoom / Ansichten / Makros auf Tastenkombinationen legen

#1

Beitrag von d'r Bastler »

Moin allerseits,

hier geht es um Faulheit für Vielschreiber, die durch Tastenkombis unterstützt werden soll.

Ausgangssituation: Ein WD-Dokument mit drei oder mehr Seiten und die Zuordnung der Tastenkombis STRG+ 0 ... 3, wobei sowohl die Tastatur-Ziffern als auch der Ziffernblock genutzt werden können. STRG + 0 zeigt die Seitenbreite, STRG + 1...3 jeweils die Anzahl der Seiten. Entsprechend funktionieren auch Funktionstasten (daher der Name Bratkartoffel :P )

Es hat sich gezeigt, dass diese Zuordnungen etwas knifflig sein können, weswegen in meinem Code erst einmal alle Zuordnungen = KeyBindings gelöscht werden. Wer es ohne diese Brachial-Version versuchen will, kommentiert diese paar Zeile (entsprechend markiert) einfach erst einmal aus. Schon vorhandene KeyBindings kann man mithilfe dieser Anleitung in die Document_Open nach Bedarf einfügen, gehen also nicht zwangsläufig verloren.

Hier der Code für das Projekt Normal.ThisDocument

Code: Alles auswählen

Option Explicit

Private Sub Document_Open()
Dim Key As KeyBinding

'Vorsicht!! Hier werden alle KeyBindings gelöscht
    For Each Key In Application.KeyBindings
        Key.Clear
    Next Key
'Vorsicht

'Hier die KeyBindungs für den Ziffernblock
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyNumeric0), KeyCategory:=wdKeyCategoryMacro, Command:="View_0"
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyNumeric1), KeyCategory:=wdKeyCategoryMacro, Command:="View_1"
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyNumeric2), KeyCategory:=wdKeyCategoryMacro, Command:="View_2"
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyNumeric3), KeyCategory:=wdKeyCategoryMacro, Command:="View_3"

'und hier die für die Zeile 1 der Tastatur
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKey0), KeyCategory:=wdKeyCategoryMacro, Command:="View_0"
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKey1), KeyCategory:=wdKeyCategoryMacro, Command:="View_1"
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKey2), KeyCategory:=wdKeyCategoryMacro, Command:="View_2"
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKey3), KeyCategory:=wdKeyCategoryMacro, Command:="View_3"

'und noch als Luxus die Syntax für Funktionstasten
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyF1), KeyCategory:=wdKeyCategoryMacro, Command:="View_1"
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyF2), KeyCategory:=wdKeyCategoryMacro, Command:="View_2"
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyF3), KeyCategory:=wdKeyCategoryMacro, Command:="View_3"
    Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyF10), KeyCategory:=wdKeyCategoryMacro, Command:="View_0"

End Sub
Und nun der Code für die verschiedenen Ansichten, der bei mir im Modul mdlPageView liegt:

Code: Alles auswählen

Option Explicit

Sub View_0()
    ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitBestFit
End Sub

Sub View_1()
    ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitFullPage
End Sub
Sub View_2()
    With ActiveWindow.ActivePane.View.Zoom
        .PageColumns = 2
        .PageRows = 1
    End With
End Sub

Sub View_3()
    With ActiveWindow.ActivePane.View.Zoom
        .PageColumns = 3
        .PageRows = 1
    End With
End Sub
Ich denke, das Prinzip ist klar: Drei verschiedene Methoden des KeyBindings (in XL übrigens einfacher mit Application.Onkey... zu realisieren) in Document_Open, verknüpft mit dem Aufruf in einem Modul bereits vorhandener Makros.

Wenn ich das Thema oben etwas knifflig genannt habe, dann hier die Erklärung warum: Ändert man in den aufzurufenden Makros etwas und versucht den Aufruf wie beschrieben, werden sie Änderungen erst einmal nicht sichtbar. Das kann bei Debuggen mittelwahnsinnig :roll: machen. Der entscheidende Tipp: Die Änderungen werden erst durch den Aufruf der Document_Open aktiviert.

Viel Spaß damit!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 884
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 241 Mal
Danksagung erhalten: 127 Mal

Re: Zoom / Ansichten / Makros auf Tastenkombinationen legen

#2

Beitrag von d'r Bastler »

Moin allerseits,

hier noch folgende Nachträge:

Bei den Subs View_, die nicht die Eigenschaft .PageFit nutzen, kann es passieren, dass das Fenster nicht aktualisiert wird. Dagegen hilft als vorletzte Zeile in der Sub:

Code: Alles auswählen

ActiveWindow.ActivePane.View.Zoom.Percentage = 100
Wichtig: Nach der Änderung nicht vergessen, die Kombis neu zu registrieren (s.o.)

Und zum fröhlicheren Debuggen hier noch der Code (allg. Modul), mit dem man die aktuellen Tastenkombis auslesen kann:

Code: Alles auswählen

Sub ListTastenKombis()
Dim doc As Document, key As keyBinding
Dim tbl As Table, row As Integer
    
    Set doc = Documents.Add
    doc.Range.Text = "Aktuelle Tasten-Kombis" & vbCrLf
    
    Set tbl = doc.Tables.Add(Range:=doc.Range, NumRows:=1, NumColumns:=2)
    tbl.Cell(1, 1).Range.Text = "Tastenkombi"
    tbl.Cell(1, 2).Range.Text = "Makro/Befehl"
    
    row = 2
    For Each key In Application.Keys
        tbl.Rows.Add
        tbl.Cell(row, 1).Range.Text = key.Command
        tbl.Cell(row, 2).Range.Text = key.KeyString
        row = row + 1
    Next key

    doc.Activate
End Sub
Viel Spaß damit!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
knobbi38
Beiträge: 62
Registriert: 20. Okt 2024, 14:15
Hat sich bedankt: 4 Mal
Danksagung erhalten: 36 Mal
Kontaktdaten:

Re: Zoom / Ansichten / Makros auf Tastenkombinationen legen

#3

Beitrag von knobbi38 »

Hallo,

eine andere Möglichkeit wäre, ganz ohne VBA, den Befehlen im Menüband eine Tastenkombination zuzuweisen. Ist vielleicht nicht ganz so flexibel, dürfte aber in vielen Fällen schon ausreichen.

Btw.:
Wenn jemand weiß, wo diese Tastenkombinationen hinterlegt werden, wäre es schön, dieses Wissen mit uns zu teilen. ;)

Und:
{Strg}{0} ist glaube ich standardmäßig schon für "Zurück zu 100 % Zoom" belegt.

Gruß Knobbi38
Benutzeravatar
d'r Bastler
Beiträge: 884
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 241 Mal
Danksagung erhalten: 127 Mal

Re: Zoom / Ansichten / Makros auf Tastenkombinationen legen

#4

Beitrag von d'r Bastler »

Moin Knobbi,

die manuell angelegten finden sich in der normal.dotm und lassen sich mit dem Code oben auslesen.

Ob dort auch manuelle Zuordnungen zu einzelnen Zeichen wieder zu finden sind, berichte ich wenn ich auch meine ganzen türkischen Sonderzeichen: i ohne Punkt, Yumusak-g, s/c+Cedille, usw. mit AltGr+Zeichen wieder am Start habe.

Grüße
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
knobbi38
Beiträge: 62
Registriert: 20. Okt 2024, 14:15
Hat sich bedankt: 4 Mal
Danksagung erhalten: 36 Mal
Kontaktdaten:

Re: Zoom / Ansichten / Makros auf Tastenkombinationen legen

#5

Beitrag von knobbi38 »

Hallo d'r Bastler,

zumindest unter Word 2010 gibt es kein Objekt Keys - dein Code läuft also so noch nicht. Es gibt aber die KeyBindungs-Auflistung, mit welcher "Custom-Keys" ausgelesen werden können.

Meine Frage bezog sich nicht auf die manuell angelegten Keys, sondern auf die beim "Menüband ändern" zugewiesenen Tastenkombinationen, und diese habe ich der normal.dotm (noch) nicht gefunden. Das Änderungsdatum von normal.dotm hat sich nach einer Zuweisung auch nicht geändert, obwohl ja normal.dotm als Speicherort angegeben werden kann - deshalb die Frage.

Gruß Knobbi38
Benutzeravatar
d'r Bastler
Beiträge: 884
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 241 Mal
Danksagung erhalten: 127 Mal

Re: Zoom / Ansichten / Makros auf Tastenkombinationen legen

#6

Beitrag von d'r Bastler »

Moin Knobbi,

2k10 steht mir leider nicht mehr zur Verfügung (daher ungetestet), vielleicht hilft folgende Code-Variante :

Code: Alles auswählen

Sub ListKeyBindings()
Dim key As keyBinding

    For Each key In KeyBindings
      Debug.Print key.Command & " - " & key.KeyString
    Next key

End Sub

Sub RemoveKeyBinding()
Dim key As keyBinding

    For Each key In KeyBindings
        If key.KeyString = "Strg+,,Umschalt+C" Then 'einer meiner Kellerleichenfunde ;-)
            key.Clear
        End If
    Next key
    MsgBox "Tastenkombination entfernt."
End Sub
Die zweite Sub dient zum Entsorgen nicht zugeordneter Kombis.

Schöne Grüße!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
knobbi38
Beiträge: 62
Registriert: 20. Okt 2024, 14:15
Hat sich bedankt: 4 Mal
Danksagung erhalten: 36 Mal
Kontaktdaten:

Re: Zoom / Ansichten / Makros auf Tastenkombinationen legen

#7

Beitrag von knobbi38 »

Hallo d'r Bastler,

in habe jetzt nochmal in 2021 nachgeschaut und auch dort gibt es keine Application.Keys Auflistung. Dein Code sollte allerdings mit Application.Keybindings laufen - ist das vielleicht nur ein Typo?
Um eine vollständige Info zu erhalten, wären zusätzlich die Eigenschaften .KeyCategory und .CommandParameter noch sinnvoll, z.B. wenn bestimmte Symbole auf eine Tastenkombination gelegt sein sollten.

Umgekehrt könnte man auch die .KeysBoundTo Eigenschaft auswerten, um z.B. zu ermitteln, welche Tastenkombinationen für ein Makro zugewiesen sind.

Grüße Knobbi38
Folgende Benutzer bedankten sich beim Autor knobbi38 für den Beitrag:
d'r Bastler
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste