アクセスVBAを使用してListBoxから指定された項目の削除を制限する方法

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

  •  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に変更する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top