SendKeys ist messing mit meinem NumLock-Taste per VBA-code in Access-Formular
Habe ich folgenden code für ein Access-Formular. Es scheint, als ob die SendKeys
ist messing mit meinem NumLock - Taste durch ein-und ausschalten, wie ich öffnen und schließen Sie das Formular.
Aus völlig legitimen Gründen, die ich nicht wollen, in zu erhalten, die ich wirklich nicht wollen, um vollständig ausblenden des Menübands (ich will die pull-down-Menüs immer noch zugänglich), so dass die DoCmd.ShowToolbar
Befehl ist nicht meine bevorzugte Art und Weise tun.
Hat jemand irgendwelche Vorschläge, wie ich kann, ändern Sie den code unten, um zu erreichen, was ich will, mit der SendKeys
Befehl?
Mithilfe von Access 2007 Befehl
CommandBars.ExecuteMso "MinimizeRibbon"
ist mir nicht verfügbar.
Durch die Art und Weise, wird die Datenbank verteilt, so dass die Lösung enthalten sein muss, innerhalb der Datenbank.
Private Sub Form_Close()
' Unhide navigation pane
DoCmd.NavigateTo "acNavigationCategoryObjectType"
DoCmd.Maximize
' Maximize the ribbon
RibbonState = (CommandBars("Ribbon").Controls(1).Height < 75)
Select Case RibbonState
Case True
SendKeys "^{F1}", True
Case False
'Do nothing, already maximized
End Select
End Sub
Private Sub Form_Load()
' Hide navigation pane
DoCmd.NavigateTo "acNavigationCategoryObjectType"
DoCmd.Minimize
Debug.Print Application.CommandBars.Item("Ribbon").Height
' Minimize ribbon
RibbonState = (CommandBars("Ribbon").Controls(1).Height < 100)
Select Case RibbonState
Case True
'Do nothing, already minimized
Case False
SendKeys "^{F1}", False
End Select
End Sub
- Werfen Sie einen Blick auf support.microsoft.com/kb/179987 (KB179987). Dies scheint ein bekannter bug, aber ich kann das nicht testen jetzt, was genau verhindert, dass es passiert.
- Ich habe versucht, das hinzufügen DoEvents sofort nach SendKeys-Befehle, aber es änderte sich nichts. Ich war sehr verwirrt, als wie die DoEvents-Funktion. Kann man im VBA-gurus mir helfen, diesen code ändern damit es funktioniert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es ein bug in VBA. Aber es gibt einen workaround.
Verwenden Sie F8 durch die makro-und finden, wo es ausgeschaltet. Es ist in der Regel nach einer
SendKeys
.Fügen Sie dann ein
Sendkeys "{NUMLOCK}", True
nach der Zeile, um den Effekt umzukehren.Wenn Sie es nicht finden können, fügen Sie es einfach am Ende und wenn es fertig ist, wird es zurück gehen. Hoffentlich, wenn Sie fügen Sie es während der show/hide-Prozess, wird es funktionieren.
Ich hatte ähnliche Problem und ich fand die Lösung auf vba-forum. Statt buggy Sendkeys simulieren kann kyes wie diese.
Anderen Tasten finden Sie hier vba-forum
Diese "previousTab" - Funktion senden Sie einfach Strg+Umschalt+F6.
Verursacht wird dies durch :
Statt
False
als zweiten parameter verwendenTrue
.Diese Zeile verursacht mein problem:
GELÖST, indem dieser:
Gibt es keinen Unterschied zwischen dem hinzufügen
{NUMLOCK}
am Anfang oder Ende der Zeichenfolge.Direkt nach dem SendKeys-Anweisung fügen Sie diese 2 Zeilen:
Wenn Sie tun, eine endgültige sendKeys-Befehl in Ihren code, indem in {NUM-Taste}, um die Erklärung kann den trick tun, wie bereits von RodB und iceBird76. Aber dies ist nicht eine gute Codierung der Praxis, und hier ist warum: wenn überhaupt, unterscheidet sich von einer Zeit zur nächsten, wenn Sie das makro ausführen, es kann oder kann nicht funktionieren. Ich weiß das, weil ich gerade eine ähnliche Frage mich. Wenn ich tun würde, ein sendKeys-Befehl am Ende des Programms, manchmal ist die Num Lock bleiben würde, aber andere Zeiten, es würde bleiben Weg, nur abhängig von bestimmten Variablen in meiner Tabelle (unabhängig davon, ob oder nicht, ich gehörte {NUMLOCK} in meinem letzten SendKeys-Anweisung).
Ich werde nicht in die details meiner eigenen Variablen, aber der Punkt ist, dass ein Programm erstellen/makro, die halten Ihre "Num Lock" auf gleich bleibend, die Sie brauchen, um ZUERST zu TESTEN, um ZU SEHEN, OB DIE NUM LOCK ein-ODER AUSGESCHALTET, dann code ausführen, basierend auf den gegenwärtigen Zustand.
Diesem Beispiel-Programm wird Ihnen eine Bestätigungs-Meldung, ob der Num-Lock ein-oder ausgeschaltet, und schalten Sie ihn ein, wenn es ausgeschaltet ist.
Die SendKeys () - Funktion, die integriert ist in VBA hat wirklich den Nebeneffekt, dass die Num-Taste deaktiviert werden. Sie können jedoch einen workaround, und rufen Sie eine andere Implementierung der gleichen Funktion, ist ein Teil des WSCRIPT-Komponente (ein Teil des Windows-Betriebssystems). Der folgende Beispielcode zeigt, wie eine Referenz auf diese Komponente gemacht werden kann und dann dessen Methode aufgerufen:
Diese Weise erhalten Sie die gleiche Funktionalität (Aufruf von Strg-G Tastatur-shortcut im Beispiel), aber es ist kein Problem mit der NumLock-in diesem Fall.
SendKeys "^{HOME}", True
war ausschalten die num, so kann ich nur wiederholt den Befehl und schaltet es wieder ein:Nach dem Versuch viele Lösungen. Die stabilste zu sein scheint auf den link unten. Fügen Sie es zu einem Modul.
http://access.mvps.org/access/api/api0046.htm