#vba #ms-access
#vba #ms-access
Вопрос:
Я использую следующий код для блокировки некоторых таблиц данных в моей базе данных:
Application.SetHiddenAttribute acTable, "Employees", True
И я использую этот код для перебора формы, чтобы очистить все текстовые поля в пользовательской форме:
Dim ctl_text As Control
For Each ctl_text In Me.Controls
If ctl_text.ControlType = acTextBox Then ctl_text = Null
Next
Set ctl_text = Nothing
Я надеялся объединить приведенную выше логику, чтобы иметь возможность перебирать базу данных и блокировать все таблицы.
Я пытался выполнить следующее:
Dim tdf As Dao.TableDef
Dim db As Dao.Database
Set db = CurrentDb
For Each tdf In db.TableDefs
If (VBA.Left(tdf.Name, 6) = "prefix") Then
Set Application.SetHiddenAttribute = True
End If
Next tdf
Однако я получаю сообщение об ошибке, сообщающее мне, что аргумент «SetHiddenAttribute» не является необязательным.
Есть идеи, как я могу это сделать?
Комментарии:
1.
Application.SetHiddenAttribute acTable, tdf.Name, True
было бы эквивалентно.
Ответ №1:
Я думаю, вы это имеете в виду:
Dim tdf As DAO.TableDef
Dim db As DAO.Database
Set db = CurrentDb
For Each tdf In db.TableDefs
If VBA.Left(tdf.Name, 6) = "prefix" Then
tdf.Attributes = tdf.Attributes Or dbHiddenObject
End If
Next
Обратите внимание, что это не «блокирует» таблицы, а только скрывает их от обычных представлений.
Чтобы удалить скрытый атрибут:
tdf.Attributes = tdf.Attributes And Not dbHiddenObject
Комментарии:
1. Это должно быть
Or
вместоAnd
того, чтобы работать (и не очищать другие атрибуты).2. Просто проверяю — при использовании функции атрибутов вы не рискуете потерять таблицу при сжатии? Кроме того, каким будет обратное приведенному выше, если я захочу его отобразить?
3. Добавлена строка кода для удаления атрибута. Не могу сказать о выживании из compact / repair — это должно быть легко проверить.
4. Спасибо @Gustav, я собираюсь запустить его на копии базы данных и дать отзыв.