Ошибка MS Access 91 Переменная объекта или С переменной блока не установлено в строке 0 - PullRequest
0 голосов
/ 03 октября 2019

У меня есть кнопка в форме с кодом ниже, сидящим в форме. Раньше выполнялось без проблем. Внезапно при нажатии на кнопку я теперь получаю эту ошибку времени выполнения:

Ошибка времени выполнения 91: переменная объекта или переменная блока не задана в процедуре cmdImportEDD_Click, строка 0

Я попытался закомментировать отдельные строки в коде, чтобы найти проблему. Я закончил тем, что определил, что часть FileDialog кажется проблемой. Тем не менее, после добавления части If.. then в последний раз код снова заработал, но сегодня ошибка возвращается.

Чтобы было ясно, ошибка появляется до выполнения кода VBA (отсюда строка 0) и Compile также не выдают ошибок!

Что здесь происходит, что я не получаю?

Private Sub cmdImportEDD_Click()
On Error GoTo cmdImportEDD_Click_Error

Dim fDialog As FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
fDialog.AllowMultiSelect = False
fDialog.InitialFileName = GetDownloadFolder
fDialog.Show
If fDialog.SelectedItems.Count < 1 Then
    Exit Sub
End If
Debug.Print fDialog.SelectedItems(1)

'Replace the selected file with the current one
Dim sOldFile As String
sOldFile = strTARGET_EDD_SALESFILE
Dim oFSO As FileSystemObject
Set oFSO = New FileSystemObject
oFSO.DeleteFile sOldFile
oFSO.MoveFile Source:=fDialog.SelectedItems(1), Destination:=sOldFile

'Perform the update
DoCmd.SetWarnings False
DoCmd.OpenQuery "qry_app_EDD", acViewNormal, acAdd
DoCmd.SetWarnings True
MsgBox "The data has been successfully imported!", vbOKOnly Or vbInformation, "Import Data: EDD"

    On Error GoTo 0
    Exit Sub

cmdImportEDD_Click_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure cmdImportEDD_Click, line " & Erl & "."
End Sub

Код для GetDownloadFolder:

Function GetDownloadFolder() As String
    Dim objShell
    Dim objFolder
    Dim objFolderItem
    Dim temp
    Const DESKTOP = &H10&

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(DESKTOP)
    Set objFolderItem = objFolder.Self
    temp = objFolderItem.Path
    temp = Left(temp, Len(temp) - 7) & "Downloads" '<--- I believe this is the download folder
    GetDownloadFolder = temp
End Function

Отменив OnError, я теперь получаю сообщение об ошибке на линии Set objFolderItem = objFolder.Self

1 Ответ

0 голосов
/ 03 октября 2019

Мне удалось заставить мой код работать, заменив несколько более сложный вызов Shell в функции GetDownloadFolder на более простой Environ("USERPROFILE") & "\Downloads".

Это позаботилось об ошибке времени выполнения.

...