VBA - метод или элемент данных не найден при открытии файла Excel из доступа

У меня есть небольшое приложение, которое подключается к серверу SQL и загружает некоторые данные в Excel. Он отлично работает на моем компьютере, но на компьютере одного из моих коллег я получаю ошибку «Метод или элемент данных не найден» при попытке изменить содержимое ячейки в электронной таблице Excel.

Это код, который не работает на моем компьютере коллеги, строка с ошибкой является последней строкой:

Public Function ExportRequest(strSupplier As String, intSupplier As Integer, _
    strOutPath As String, iEmpty As Integer, strManager As String, _
    ichkVolume As Integer, iframeVolume As Integer, ichkMatNum As Integer) As String

   On Error GoTo err_Handler
   
   ' Excel object variables
   Dim appExcel As Excel.application
   Dim wbk As Excel.Workbook
   Dim wks As Excel.Worksheet
   Dim wksvol As Excel.Worksheet
   Dim wsRange As Excel.Range
   Dim wksvolRange As Excel.Range
   
   Dim sTemplate As String
   Dim sTempFile As String
   Dim sOutput As String
      
   Dim dbs As DAO.Database
   Dim rst As DAO.Recordset
   Dim sSQL As String
   Dim sDateFrom As String
   Dim sDateTo As String
   Dim lRecords As Long
   Dim iRow As Integer
   Dim iCol As Integer
   Dim iFld As Integer
   Dim intYear As Integer
   
   Const cStartRow As Byte = 3
   Const cStartColumn As Byte = 1
      
   intYear = year(Now)
      
   DoCmd.Hourglass True
   
   ' set to break on all errors
   application.SetOption "Error Trapping", 0
   
   ' start with a clean file built from the template file
   
   sTemplate = ap_GetConfig("NegTemplatePath") & ap_GetConfig("NegTemplate")
   
   sOutput = strOutPath & "\Price Template " & strSupplier & "-2020" & ".xlsm"
   
   If Dir(sOutput) <> "" Then Kill sOutput
   FileCopy sTemplate, sOutput
   
   ' Create the Excel Applicaiton, Workbook and Worksheet and Database object
   Set appExcel = Excel.application
   Set wbk = appExcel.Workbooks.Open(sOutput)
   wbk.Sheets("Price List").Visible = xlSheetVisible
   Set wks = appExcel.Worksheets("Price List")
   wks.UnProtect Password:="irishstout"
   wks.Cells(1, 2) = strSupplier

Надеюсь, кто-то сталкивался с чем-то подобным?

# excel ms-access
Источник
  • 0
    Если вы закомментируете обработчик ошибок, будет ли выделена последняя строка?
  • 5
    Действительно должно быть Set wks = wbk.Worksheets("Price List")
  • 5
    Также: Set appExcel = New Excel.application а не просто Set appExcel = Excel.application
  • 0
    @TimWilliams Я прокомментировал строку с ошибкой и другой всплывающей строкой: inline wks.Columns("E:G"). EntireColumn.Delete
  • 0
    @ Рори, спасибо! Я внес это изменение, но по-прежнему имеет ту же ошибку :(
  • 0
    Я не вижу этой строки в вашем сообщении, но перед . Также помогает точно указать, что это за сообщение об ошибке.
  • 0
    @TimWilliams Эта строка находится дальше по функции, пробел перед строкой . была опечатка в моем ответе. Полный текст сообщения об ошибке: Метод или элемент данных не найден (ошибка 461).
  • 0
    Без пробела в этой строке нет ничего очевидного.
Codelisting
за 1 против

В объектной модели MS Office все методы, свойства и события имеют иерархическую структуру. ОбычноApplication объект обычно инициализирует элементы верхнего уровня. Все остальные произошли от его потомков. СледовательноExcel.Application не будет содержать свойств для листов или диапазонов. См. Примеры ниже.

Excel

  • Методы : Приложение> Книги> Добавить / открыть ...

  • Свойства : Приложение> Книга> Таблицы / Запросы / Путь ...

  • События : Приложение> Рабочая книга> Активировать / Перед закрытием ...

    Set appExcel = New Excel.Application
    Set wbk = appExcel.Workbooks.Open("C:\Path\MyWorkbook.xlsx")
    Set wks = wbk.Worksheets("My Sheet")
    
    wks.Name = "My New Name"
    

Слово

  • Методы : Приложение> Добавить / открыть ...

  • Свойства : Приложение> Документ> Абзацы / Таблица / Закладки ...

    Set wdApp = New Word.Application
    Set wdDoc = wdApp.Documents.Open("C:\Path\MyDocument.docx")
    Set wdPara = wdDoc.Paragraphs(1)
    
    wdDoc.Tables.Add(NumRows=3, NumColumns=3)
    

Доступ

  • Методы :

    • Приложение> OpenCurrentDatabase> CurrentDb ...
    • Приложение> DoCmd> OpenForm / OpenReport ...
  • Характеристики:

    • Приложение> CurrentDb> TableDefs / QueryDefs ...
    • Приложение> ТекущийПроект> AllForms / AllReports ...
  • События : Приложение> CurrentProject> AllForms> Форма> AfterUpdate / BeforeClose ...

    Set appAccess = New Access.Application
    Set accFile = appAccess.OpenCurrentDatabase("C:\Path\MyDatabase.accdb")
    Set db = accFile.CurrentDb()
    
    appAccess.DoCmd.OpenForm("My Form")
    
  • 0
    Привет, я исправил это, но все еще получаю ошибку. Я должен заметить, что ошибка возникает только у одного пользователя, может ли версия excel иметь к этому какое-то отношение?
  • 0
    Вы используете ключевое слово New Excel.Application ? В противном случае найдите точную проблемную строку, удаляя по одной строке за раз.
  • 0
    Я использовал встроенное New и получил тот же результат, что наиболее интригует, так это то, что это происходит только на одном компьютере.
  • 0
    Еще раз выполните отладку и найдите строку, вызывающую ошибку. Я не понимаю, почему это проблема с версией или процессором.
  • 0
    Я выполнил отладку, и вот что происходит: [Сообщение об ошибке] ( imgur.com/VYOMajg )
  • 0
    В VBA IDE машины, которая вызывает эту ошибку, в разделе Tools \ References проверена ли «Библиотека объектов Microsoft Excel XX»? Это необходимо для раннего связывания, как здесь.
  • 0
    Спасибо за ответ. Я проверил, но все еще не работает.
  • 0
    Попробуйте удалить все средства защиты листа, а затем повторно запустить код.
  • 0
    В итоге я удалил и восстановил БД из самой последней рабочей резервной копии, что избавило меня от проблемы, это было довольно странно.
Codelisting
Популярные категории
На заметку программисту