Мне нужно обработать доступ и превзойти файлы из разных отделов в моей базе данных MS-Access.Пользователь должен выбрать эти файлы, поэтому я создал таблицу отделов, в которой пользователь должен заполнить имена файлов.
В форме для заполнения этих имен файлов я добавил кнопку, чтобы открыть диалоговое окно выбора файла.
Я создал эту кнопку как кнопку Сохранить запись и поместил логику в событие On Enter
.
Теперь каждый раз, когда пользователь открывает форму, диалог выбора файла уже открывается для первого файла, даже до того, как форма отображается.
Почемуэто произошло и как я могу предотвратить это?
Для полноты: это мой код для события Enter:
Private Sub SelectCmd_Enter()
On Error GoTo hell
Dim FileDlg As FileDialog
' If is_loaded Then
Select Case Me.Controls("Filter")
Case "Excel File"
Set FileDlg = Application.FileDialog(msoFileDialogFilePicker)
FileDlg.Filters.Add "Excel File", "*.xlsx; *.xlsm; *.xls"
FileDlg.InitialFileName = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & Me.Controls("FileNameTemplate").Value
Case "Access DB"
Set FileDlg = Application.FileDialog(msoFileDialogFilePicker)
FileDlg.Filters.Add "Access DB", "*.accdb"
FileDlg.InitialFileName = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & Me.Controls("FileNameTemplate").Value
Case "Folder"
Set FileDlg = Application.FileDialog(msoFileDialogFolderPicker)
FileDlg.InitialFileName = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\"))
End Select
FileDlg.Title = Me.Controls("Caption").Value
If FileDlg.Show Then
Me.Controls("FilePath").Value = FileDlg.SelectedItems.Item(1)
End If
Set FileDlg = Nothing
' Else
' is_loaded = True
' End If
Exit Sub
hell:
Debug.Print Err, Error
Debug.Assert False
Resume
End Sub
Я попытался решить проблему, установив для частного логического значения is_loaded
значениеfalse при загрузке формы:
Private is_loaded As Boolean
Private Sub Form_Activate()
is_loaded = False
[...]
End Sub
, но тогда кнопка SelectCmd
в первой строке больше не реагировала на нажатия при загрузке файла.