run time error 91 object variable or with block variable not set

Есть простенький макрос, он просто ищет нужное значение в таблице и выводит найденное в текстовик. При запуске с рабочего стола все работает так, как надо, а при запуске с папки сайта (XAMPP) выдает ошибку. Макрос:

    Private Sub Workbook_Open()
       Set ImpRng = ActiveCell
       Open "The_path_to_the_folder" For Input As #1
       Line Input #1, Data 


       Close #1
       Worksheets("Лист1").Activate
       Dim c As Variant
       Dim r As Variant
       Dim f As Variant
       Set c = Nothing
       Z = 4
       c = Cells.Find(What:=Data).Column

       r = Cells.Find(What:=Data).Row
       f = Cells(r, c + 1).Value
       Cells(Z).Value = f
       Cells(Z - 1).Value = Data
       Open "The_path_to_the_folder" For Output As #2

       Print #2, Data; " "; f
       Close #2
    End Sub

От гугла толку мало


Ответы (2 шт):

Автор решения: Akina
Private Sub Workbook_Open()
   Dim sh As Worksheet
   Dim c As Variant
   Dim r As Variant
   Dim f As Variant

   Set ImpRng = ActiveCell ' зачем? всё равно не используется... '

   Open "The_path_to_the_folder" For Input As #1
   Line Input #1, Data 
   Close #1

   Set sh = ThisWorkbook.Worksheets("Лист1")
   Set c = Nothing
   Z = 4
   c = sh.Cells.Find(What:=Data).Column
   r = sh.Cells.Find(What:=Data).Row
   f = sh.Cells(r, c + 1).Value
   sh.Cells(Z).Value = f
   sh.Cells(Z - 1).Value = Data

   Open "The_path_to_the_folder" For Output As #2
   Print #2, Data; " "; f
   Close #2
End Sub
→ Ссылка
Автор решения: vikttur

Cells.Find(What:=Data)...- поиск ячейки со значением, записанным в переменной Data. Если ячейка найдена, возращается номер ее столбца (.Column) или строки (.Row).

Ошибка говорит о том, что данные на листе не найдены. А если быть точнее: не определен объект - ячейка. Можно добавить проверку:

Private Sub Workbook_Open()
    Dim sPathTxt As String, sData As String
    Dim c As Long, r As Long
    Dim f
    Const lClmn As Long = 4

    sPathTxt = "здесь_полный_путь_к файлу (с_именем_и_расширением)"

    Open sPathTxt For Input As #1
    Line Input #1, sData
    Close #1

    With Worksheets("Лист1")
        On Error GoTo err_
        c = .Cells.Find(What:=sData).Column
        r = .Cells.Find(What:=sData).row
        f = .Cells(r, c + 1).Value
        .Cells(1, lClmn).Value = f
        .Cells(1, lClmn - 1).Value = sData
    End With

    Open sPathTxt For Output As #1
    Print #1, sData; " "; f
    Close #1
err_:
    If Err Then MsgBox sData & Chr$(10) & "Данные не найдены" 64, ""
End Sub

При записи другой номер файла (Input As #2) указывать не обязательно, ведь запись производится в тот же текстовый файл.

→ Ссылка