Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

F11 für Nutzer sperren.

Begonnen von thoco, Februar 02, 2025, 12:13:24

⏪ vorheriges - nächstes ⏩

thoco

Ich möchte die F11 Taste für Nutzer sperren, MS Access läuft auf Office 365.

Dazu habe ich folgenden Code verwendet:

Sub DeaktiviereSpezialtasten()
    ' Deaktiviert die Access-Spezialtasten wie F11, STRG+G, ALT+F11
    On Error GoTo Fehler
    Application.SetOption "AllowSpecialKeys", False
    MsgBox "Die Spezialtasten (wie F11) wurden deaktiviert!", vbInformation
    Exit Sub
Fehler:
    MsgBox "Fehler: " & Err.Description, vbCritical
End Sub

Jetzt kommt die Fehlermeldung: AllowSpecialKeys ist kein gültiger Name.

Was muss ich anders machen?



Bitsqueezer

Hallo,

wie gerade erst vor ein paar Tagen beschrieben: Optionen sind in Access nicht per Default vorhanden. Wenn man sie das erste Mal einstellen will, muß man sie erst mit CreateProperty erzeugen.

Siehe auch Beschreibung der Eigenschaft:
https://learn.microsoft.com/de-de/office/vba/access/concepts/miscellaneous/allowspecialkeys-property

Nebenbei gibt es zum Abfangen auch eine andere zuverlässige Methode, die Verwendung des AUTOKEYS-Makros. Hier kann man für jede Taste definieren, was passieren soll und das funktioniert unabhängig von Formularen etc.
https://support.microsoft.com/de-de/topic/ausf%C3%BChren-von-access-makros-mithilfe-einer-tastenkombination-0d267570-d3da-46eb-9bfb-a3c81af676be
https://access-im-unternehmen.de/Das_AutoKeysMakro/

Gruß

Christian

Debus

Hey, ich habe das auch mal gebraucht und hatte da auf VB@archiv gefunden. Es funktioniert und ist einfach einzubauen. Den Code in ein Module:

hier noch der Link zum Artikel:

https://www.vbarchiv.net/tipps/tipp_1173-access-2000-beliebige-tasten-sperren.html

Option Compare Database
Option Explicit

Global KeyCode2 As Integer        ' KeyCode kann hiermit jetzt global verarbeitet werden!
Global Shift2 As Integer          ' Shift (Shift-, Ctrl- und Alt-Taste)
Global K_ARRAY2(20, 1) As Integer    ' Feld für zu sperrende Keys (Dimension ggf. anpassen!)
Global K_ARRAY2_OK As Boolean     ' Merker für Feld

Public Function TastenAbblocken()
' ***** Abblocken von Tasten Für EINZELNE  Steuerelemte: !!! ******
' * - Im EigenschaftsFenster des Steuerelementes :
' *      TasteAb        (.OnKeyDown)  auf  "=TastenAbblocken()"
' *   Im EigenschaftsFenster des Formulars :
' *      Tastenvorschau (.KeyPreview) auf  "Ja"
' *      TasteAb        (.OnKeyDown)  auf  "[Ereignisprozedur]" mit:
' *                KeyCode2 = KeyCode
' *                Shift2 = Shift
' *                Call TastenAbblocken
' *
' * oder besser! :
' * - In Ereignisprozedur (_Sub...KeyDown) des Steuerelementes :
' *                KeyCode2 = KeyCode
' *                Shift2 = Shift
' *                Call TastenAbblocken
' *****************************************************************

    If Not K_ARRAY2_OK Then
        ' nur, wenn globales Key-Array noch nicht gefüllt!
        Dim I As Long
        On Error GoTo ErrHandler

        ' Hier im Feld für abzublockende Keys "K_ARRAY2" die vbKonstanten eintragen!!
        ' K_ARRAY2(1, 0) = vbKeyF1  ' Hilfe kann bleiben...
        'K_ARRAY2(2, 0) = vbKeyF2    ' Objekt umbenennen
        'K_ARRAY2(3, 0) = vbKeyF3
        ' K_ARRAY2(4, 0) = vbKeyF4  ' Kombifeld DropDown
        'K_ARRAY2(5, 0) = vbKeyF5    ' Aktualisieren des Datenbankfensters
        'K_ARRAY2(6, 0) = vbKeyF6
        'K_ARRAY2(7, 0) = vbKeyF7    ' Rechtschreibprüfung
        'K_ARRAY2(8, 0) = vbKeyF8
        ' K_ARRAY2(9, 0) = vbKeyF9  ' F9 ist und bleibt für Aktualisierungen
        'K_ARRAY2(10, 0) = vbKeyF10  ' Aktivieren Menüleiste
        K_ARRAY2(11, 0) = vbKeyF11  ' DatenbankFenster in Vordergrund (->Extras, Start,Weitere)
        'K_ARRAY2(12, 0) = vbKeyF12  ' Objekt speichern ..  !!!!!

        'K_ARRAY2(13, 0) = vbKeyF4   ' STRG F4  geöffnetes Fenster schliessen !
        'K_ARRAY2(13, 1) = acCtrlMask

        'K_ARRAY2(14, 0) = vbKeyF6   ' STRG F6 Wechseln zwischen geöffneten Fenstern
        'K_ARRAY2(14, 1) = acCtrlMask

        'K_ARRAY2(15, 0) = vbKeyF11  ' STRG F11 Benutzerdefinierte <-> eingebaute Menüleiste
        'K_ARRAY2(15, 1) = acCtrlMask

        'K_ARRAY2(16, 0) = vbKeySpace ' ALT LEERTASTE  'Zum Anzeigen des Systemmenüs
        'K_ARRAY2(16, 1) = acAltMask

        'K_ARRAY2(17, 0) = vbKeyF4    ' ALT F4  'ACCESS schliessen !
        'K_ARRAY2(17, 1) = acAltMask
        K_ARRAY2(18, 0) = vbKeyPageUp
        K_ARRAY2(19, 0) = vbKeyPageDown


        'K_ARRAY2_OK = True      ' Merken: globales Key-Array wurde bereits gefüllt!
    End If

    For I = 0 To UBound(K_ARRAY2, 1)
        If K_ARRAY2(I, 0) = KeyCode2 And K_ARRAY2(I, 1) = Shift2 Then
            ' MsgBox K_ARRAY2(i, 0) & "....." & K_ARRAY2(i, 1)
            DoCmd.CancelEvent
        End If
    Next I
    Exit Function

ErrHandler:
    MsgBox Err.Number & "   " & Err.Description
End Function



' ********** Liste von vbKey's (nur Kommentare) ***********************
' Konstante Wert Beschreibung
' vbKeyLButton 0x1 Linke Maustaste
' vbKeyRButton 0x2 Rechte Maustaste
' vbKeyCancel 0x3 ABBRECHEN-TASTE
' vbKeyMButton 0x4 Mittlere Maustaste
' vbKeyBack 0x8 RÜCKTASTE
' vbKeyTab 0x9 TAB-TASTE
' vbKeyClear 0xC ENTF-TASTE
' vbKeyReturn 0xD EINGABETASTE
' vbKeyShift 0x10 UMSCHALTTASTE
' vbKeyControl 0x11 STRG-TASTE
' vbKeyMenu 0x12 MENÜTASTE
' vbKeyPause 0x13 PAUSE-TASTE
' vbKeyCapital 0x14 FESTSTELLTASTE
' vbKeyEscape 0x1B ESC-TASTE
' vbKeySpace 0x20 LEERTASTE
' vbKeyPageUp 0x21 BILD-AUF-TASTE
' vbKeyPageDown 0x22 BILD-AB-TASTE
' vbKeyEnd 0x23 ENDE-TASTE
' vbKeyHome 0x24 POS1-TASTE
' vbKeyLeft 0x25 NACH-LINKS-TASTE
' vbKeyUp 0x26 NACH-OBEN-TASTE
' vbKeyRight 0x27 NACH-RECHTS-TASTE
' vbKeyDown 0x28 NACH-UNTEN-TASTE
' vbKeySelect 0x29 AUSWAHLTASTE
' vbKeyPrint 0x2A DRUCK
' vbKeyExecute 0x2B AUSFÜHREN-TASTE
' vbKeySnapshot 0x2C SNAPSHOT-TASTE
' vbKeyInsert 0x2D EINFG-TASTE
' vbKeyDelete 0x2E LÖSCHEN-TASTE
' vbKeyHelp 0x2F HILFETASTE
' vbKeyNumlock 0x90 NUM-TASTE
'
' Die Tasten A bis Z entsprechen den ASCII-Zeichen A - Z:
' Konstante Wert Beschreibung
' vbKeyA 65 A-TASTE
' vbKeyB 66 B-TASTE
' vbKeyC 67 C-TASTE
' vbKeyD 68 D-TASTE
' vbKeyE 69 E-TASTE
' vbKeyF 70 F-TASTE
' vbKeyG 71 G-TASTE
' vbKeyH 72 H-TASTE
' vbKeyI 73 I-TASTE
' vbKeyJ 74 J-TASTE
' vbKeyK 75 K-TASTE
' vbKeyL 76 L-TASTE
' vbKeyM 77 M-TASTE
' vbKeyN 78 N-TASTE
' vbKeyO 79 O-TASTE
' vbKeyP 80 P-TASTE
' vbKeyQ 81 Q-TASTE
' vbKeyR 82 R-TASTE
' vbKeyS 83 S-TASTE
' vbKeyT 84 T-TASTE
' vbKeyU 85 U-TASTE
' vbKeyV 86 V-TASTE
' vbKeyW 87 W-TASTE
' vbKeyX 88 X-TASTE
' vbKeyY 89 Y-TASTE
' vbKeyZ 90 Z-TASTE
'
' Die Tasten 0 bis 9 entsprechen den ASCII-Zeichen 0 - 9:
' Konstante Wert Beschreibung
' vbKey0 48 0-TASTE
' vbKey1 49 1-TASTE
' vbKey2 50 2-TASTE
' vbKey3 51 3-TASTE
' vbKey4 52 4-TASTE
' vbKey5 53 5-TASTE
' vbKey6 54 6-TASTE
' vbKey7 55 7-TASTE
' vbKey8 56 8-TASTE
' vbKey9 57 9-TASTE
'
' Die folgenden Kontanten repräsentieren die Zahlen auf der Zehnertastatur:
' Konstante Wert Beschreibung
' vbKeyNumpad0 0x60 0-TASTE
' vbKeyNumpad1 0x61 1-TASTE
' vbKeyNumpad2 0x62 2-TASTE
' vbKeyNumpad3 0x63 3-TASTE
' vbKeyNumpad4 0x64 4-TASTE
' vbKeyNumpad5 0x65 5-TASTE
' vbKeyNumpad6 0x66 6-TASTE
' vbKeyNumpad7 0x67 7-TASTE
' vbKeyNumpad8 0x68 8-TASTE
' vbKeyNumpad9 0x69 9-TASTE
' vbKeyMultiply 0x6A MULTIPLIKATIONSZEICHEN-TASTE (*)
' vbKeyAdd 0x6B PLUSZEICHEN-TASTE (+)
' vbKeySeparator 0x6C EINGABETASTE
' vbKeySubtract 0x6D MINUSZEICHEN-TASTE (-)
' vbKeyDecimal 0x6E DEZIMALPUNKT-TASTE (.)
' vbKeyDivide 0x6F DIVISIONSZEICHEN-TASTE (/)
'
' Die folgenden Konstanten repräsentieren die Funktionstasten:
' Konstante Wert Beschreibung
' vbKeyF1 0x70 F1-TASTE
' vbKeyF2 0x71 F2-TASTE
' vbKeyF3 0x72 F3-TASTE
' vbKeyF4 0x73 F4-TASTE
' vbKeyF5 0x74 F5-TASTE
' vbKeyF6 0x75 F6-TASTE
' vbKeyF7 0x76 F7-TASTE
' vbKeyF8 0x77 F8-TASTE
' vbKeyF9 0x78 F9-TASTE
' vbKeyF10 0x79 F10-TASTE
' vbKeyF11 0x7A F11-TASTE
' vbKeyF12 0x7B F12-TASTE
' vbKeyF13 0x7C F13-TASTE
' vbKeyF14 0x7D F14-TASTE
' vbKeyF15 0x7E F15-TASTE
' vbKeyF16 0x7F F16-TASTE




Public Function TastenAbblockenAutoAll(frm1, DO_IT)
' *************** Abblocken von Tasten Für ein GANZES Formular !!! *********
' * - Diese Funktion sollte beim Laden des Formulars aufgerufen werden:
' *        Call TastenAbblockenAutoAll(Me, True)
' *   DO_IT True/False aktiviert/deaktiviert das Abblocken
' *
' * - Ausserdem TasteAb-Ereignis des Formulars :
' *    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
' *    'KeyCode2 = KeyCode
' *    'Shift2 = Shift
' *    'Call TastenAbblocken
' *
' * - Controls, die bereits ein KeyDown-Ereignis eingetragen haben:
' * - Zusätzlich in _Sub...KeyDown des Steuerelementes :
' *                KeyCode2 = KeyCode
' *                Shift2 = Shift
' *                Call TastenAbblocken
' **************************************************************************

    Dim ctl1 As Control

    frm1.KeyPreview = DO_IT          ' Tastenvorschau für's Formular !
    If DO_IT = True Then
        ' frm1.OnKeyDown = "[Ereignisprozedur]" ' Prozedur aktivieren deutsch
        frm1.OnKeyDown = "[Event Procedure]"    ' Prozedur aktivieren englisch 2005-03-07 Rimi
    Else
        frm1.OnKeyDown = ""                     ' Prozedur deaktivieren
    End If

    On Error Resume Next    ' zB. Bezeichnungsfelder uebergehen
    For Each ctl1 In frm1.Controls
        If ctl1.Enabled Then
            If DO_IT = True Then
                If ctl1.OnKeyDown = "" Then     ' nur leere Einträge ändern !
                    ctl1.OnKeyDown = "=TastenAbblocken()"
                End If
            Else
                If ctl1.OnKeyDown = "=TastenAbblocken()" Then   ' nur eigene Eintraege ändern !
                    ctl1.OnKeyDown = ""
                End If
            End If
        End If
    Next ctl1
    On Error GoTo 0    ' Fehlerbehandlung wieder abschalten
End Function


Aufruf dann so

Call TastenAbblocken
Vielleicht hilft das ja

Holger

thoco

Vielen Dank für die Hilfe - ich teste das jetzt und gebe noch eine Rückmeldung.