So schränken Sie das Löschen bestimmter Elemente aus dem Listenfeld mithilfe von Access vba ein

StackOverflow https://stackoverflow.com//questions/22054129

  •  21-12-2019
  •  | 
  •  

Frage

Ich habe eine Listbox, die 18 Elemente enthält.Das ausgewählte Element kann aus dem Listenfeld gelöscht werden, indem Sie auf die Schaltfläche 'Löschen' klicken.Wie kann ich verhindern, dass ein Benutzer bestimmte von mir angegebene Elemente löscht?

Private Sub cmdDelete_Click()
    Dim i As Integer

    With Me.listbox1
        For i = .ListCount - 1 To 0 Step -1
            If .Selected(i) = True Then
                .RemoveItem i
            End If
        Next i
    End With
End Sub
War es hilfreich?

Lösung

Sie könnten die Werte in einer Tabelle speichern?Dann könnten Sie eine Spalte in der Tabelle haben, die angibt, ob das Feld gelöscht werden kann oder nicht, was einfach in Ihren VBA zu integrieren wäre.

Bearbeiten für weitere Erklärungen:

Haben Sie listbox ungebunden (dh.kein spezifisches Feld als Datenquelle).

Erstellen Sie eine Tabelle, die Spalten für eine ID (als automatische Nummerierung), die Werte, die in Ihrem Listenfeld angezeigt werden sollen (als Textfeld), und eine letzte Spalte enthält, in der Sie Ja oder Nein ankreuzen können (als boolesches oder Ja / Nein-Feld).Z.B.

ID     Values                Allow deletion?
1      Example               Yes
2      Another example       No
3      Yes another example   Yes

Wählen Sie in der Zeilenquelle Ihrer Listbox diese Tabelle aus.

Ihr Löschunter könnte jetzt den folgenden Code ausführen.

dim qry as string
dim strLookup as string

strLookup = dlookup("[Allow deletion]","[Your Table]", YOURSELECTEDFIELDHERE & "=[Values]")

if strLookup = "No" Then
    msgbox "You're not allowed to delete this field."
    exit sub
else 
    qry = "DELETE * FROM [Your Table] WHERE [Values] = YOURSELECTEDFIELDHERE"
    CurrentDB.Execute qry
    Me.YourListBoxName.Requery
end if

Dadurch wird nach dem Wert gesucht, den Sie aus Ihrem Listenfeld abgerufen haben, mit dem Feld Löschungen zulassen abgeglichen, gelöscht, wenn dieses Feld als Ja markiert ist, oder belassen, wenn es als Nein markiert ist.

Wenn Sie das Feld nur vorübergehend löschen und es beim nächsten Laden des Formulars anzeigen lassen möchten, müssen Sie der Tabelle eine weitere Spalte mit dem Namen "Anzeigen" hinzufügen, die ebenfalls ein Ja / Nein-Feld wäre, und die Standardeinstellung auf Ja setzen.

Sie würden dann Ihre Zeilenquelle auf Folgendes setzen SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes".

Dann qry im obigen Code sollte stattdessen auf gesetzt werden:

UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));

Dadurch wird dann der Wert von Show in No geändert. Wenn das Listenfeld angefordert wird, wird es nicht mehr angezeigt.

Sie müssen eine weitere Abfrage ausführen, um alle beim Beenden des Formulars wieder auf Ja zu setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top