アクセスVBAを使用してListBoxから指定された項目の削除を制限する方法
-
21-12-2019 - |
質問
私は18項目を含むリストボックスを持っています。選択した項目は「削除」ボタンをクリックしてリストボックスから削除できます。ユーザーが指定した特定の項目を削除するのを防ぐにはどうすればよいですか?
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
. 解決
値をテーブルに保存できますか?その後、フィールドを削除できるかどうかを指定したテーブルに列を持つことができます。
さらに説明のために編集:
リストボックスをアンバックスアウディング(すなわち、データソースとして特定のフィールドはありません)。
IDの列を(自動数として)表示するテーブルを作成するリストボックス(テキストボックスとして)表示される値、および[はい]または[いいえ]にクリックすることができる値(ブール値またはYESとして) /フィールドなし)。 e.g.
ID Values Allow deletion?
1 Example Yes
2 Another example No
3 Yes another example Yes
.
ListBoxのrowsourceで、そのテーブルを選択します。
あなたの削除サブは次のコードを実行できるようになりました。
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
.
これはあなたのリストボックスからgrabbedした値を探すでしょう、それを[削除の許可]フィールドと一致し、そのフィールドがyesとしてマークされている場合、またはそれがNoとしてマークされている場合にはそれを削除します。
次回のフィールドを一時的に削除したい場合は、次回フォームをロードするときに表示されている場合は、それを非表示にすると、「show」というテーブルにさらに列を追加する必要があります。はい/いいえフィールド、デフォルトをyesに設定します。
あなたのrowsourceをSELECT * FROM [YOURTABLE] WHERE [Show] = "Yes"
に設定します。
その後、上記のコードのqry
は、代わりに設定する必要があります。
UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));
.
これはshow to noに変更されます。そのため、リストボックスが再実行されると表示されなくなります。
フォーム出口で、別のクエリを実行して、それらをすべてYESに変更する必要があります。