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?
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
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
Vielen Dank für die Hilfe - ich teste das jetzt und gebe noch eine Rückmeldung.