spinnifex
Goto Top

VBA Strg+a oder AltGR für Makroaufruf (engl.) belegen

Moin allerseits!

Um die deutschen Umlaute in einer UserForm/Textbox per Tastenkombi zu nutzen, habe ich mir ein Makro geschrieben, das die Sonderzeichen auch auf englischenTastaturen zugänglich macht. Dabei nutze ich Textbox.SelStart, um die Position des Cursors zu lokalisieren und dort dann mit den Kombis Strg+a/A, o/O, u/U und s unsere vier lokalen Hieroglyphen mit leicht merkbaren Shortcuts anzubieten. Für äÄöÖüÜ & ß klappt das bestens.

Strg+a ist in Windows mit Alles markieren belegt und reagiert in der Textbox entsprechend, führt dann das Makro dennoch aus. Nur wird durch die Markierung nun die SelStart mit 0 überschrieben und das ä/Ä erscheint nicht imsondern vordem Text. Kann man das irgendwie für die Laufzeit der Userform unterbinden?

Lieber als die Kombination Strg+... hätte ich AltGr + ... verwendet. Nachdem das System, auf dem der Code laufen soll, aber ein englisches ist, das nach meinen Suchereien kein AltGrkennt, musste ich auf Strg + .. ausweichen. Oder gibt es vielleicht doch einen Trick ein AltGr auf einem englischen System zu simulieren?

Beide Lösungen wären toll. Hat jemand eine zielführende Idee?

VIelen Dank!

Spinnifex

Content-ID: 2778911890

Url: https://administrator.de/contentid/2778911890

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

rubberman
rubberman 14.05.2022 um 13:54:36 Uhr
Goto Top
Moin.

[AltGr] und [Strg]+[Alt] verhalten sich üblicherweise gleich. Probier mal ob sich das unter VBA so widerspiegelt.

Steffen
spinnifex
Lösung spinnifex 14.05.2022 um 14:35:45 Uhr
Goto Top
Ein bisschen mehr Grips eingesetzt, kann man sogar selber drauf kommen: ALTGr = STRG +ALT. Dann muss man nur noch beide KeyDown-Events inklusive Shift (off = 6, on = 7) abfangen, und es klappt
Option Explicit
'<'#>Umlaute in englische Userform API</#>  
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer  

Public Function isCtrl() As Boolean
    If GetKeyState(&HA2) < 0 Or GetKeyState(&HA3) < 0 Then isCtrl = True
End Function
Public Function isAlt() As Boolean
    If GetKeyState(&HA4) < 0 Then isAlt = True
End Function

Schönen Tach noch!
spinnifex
spinnifex 14.05.2022 um 17:23:00 Uhr
Goto Top
Moin Rubberman,

Danke für Deinen Hinweis. Da haben sich meine Versuche mit Deinem Kommentar überschnitten. Probiert und gelernt:
ob sich das unter VBA so widerspiegelt.
Yep!

Schönes Wochenende!