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) указывать не обязательно, ведь запись производится в тот же текстовый файл.