Как ограничить удаление указанных элементов из списка с помощью Access VBA

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
.

Это было полезно?

Решение

Вы можете хранить значения в таблице? Тогда у вас может быть столбец в таблице, которая указала, может ли поле можно удалить или нет, это было бы легко встроить в вашу VBA.

Редактировать для дальнейшего объяснения:

У вас есть перевязанный ящик (то есть нет конкретного поля в качестве его данных).

Создать таблицу, которая содержит столбцы для идентификатора (в качестве автонатора), значения, которые вы хотите появиться в вашем списке (в качестве текстового полета), и окончательный столбец, который вы можете отметить YES или NOT (как логический или да / нет поля). Например.

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

в Rowsouse вашего списка, выберите эту таблицу.

Ваш SUB DELETE теперь может выполнить следующий код.

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
.

Это будет искать значение, которое вы схватили из вашего списка, сопоставьте его против полевых удалений, удалите его, если это поле помечено как да или оставьте, если он помечен как нет.

Если вы хотите временно удалить только поле и появиться в следующий раз, когда вы загрузите форму - по сути, скрыть его, вам придется добавить еще один столбец к таблице, называемую «Show», которая также будет поле да / нет, и установите по умолчанию для да.

Вы бы затем установили ваш orowsource для GeneracodicTagcode.

Тогда SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes" в вышеуказанном коде должно быть установлено значение:

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

Это затем изменит значение шоу на нет, поэтому, когда список переключается, он больше не появится.

Вам нужно будет запустить другой запрос, чтобы изменить все из них обратно в YES на выходе на форму.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top