1

Тема: Ошибка 91 Обьект переменной или блок

Возникает такая ошибка при поиске значения по первой строке

Dim Ячейка as Excel.range
Dim Заг as String
Заг = "искомое слово"
Set Ячейка = ActiveSheet.Rows(1).Find(What:=Заг, LookAt:=xlWhole)

Ругается на последнюю строку. Это странно т.к. такое значение переменной "Заг" существует - содержится в первой строке, столбце А. Нужна помощь.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

2

Re: Ошибка 91 Обьект переменной или блок

Да, это из ворда запускается.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

3

Re: Ошибка 91 Обьект переменной или блок

Fck_This пишет:

...
Ругается на последнюю строку.
...

Действительно, странно. Надеюсь, это VBA-код для Excel?
Я заменил русские идентификаторы английскими, и у меня все проходит и находит ячейку.

Sub t()
Dim clrg As Excel.Range
Dim Hdr As String
Hdr = "искомое слово"
Set clrg = ActiveSheet.Rows(1).Find(What:=Hdr, LookAt:=xlWhole)
clrg.Select
End Sub

А какое сообщение об ошибке: от компилятора или Runtime-error?

4

Re: Ошибка 91 Обьект переменной или блок

Run-time error 91. Object variable or with block variable not set (писал по памяти, но думаю всё правильно)

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

5

Re: Ошибка 91 Обьект переменной или блок

Fck_This пишет:

Run-time error 91. Object variable or with block variable not set (писал по памяти, но думаю всё правильно)

В данном случае это может быть как ошибка компиляции, так и Runtime-error (скорее второе). Вы пишете, что запускается все из Word, но у вас в сбойном операторе указан объект ActiveSheet, который Word не должен понимать.
То есть, я предполагаю, что к моменту исполнения оператора активным Application-объектом является Word (а не Excel), поэтому выдается сообщение об ошибке. Возможно, вы хотели из Word запустить Excel, а в нем выполнить этот поиск. Тогда надо предварительно создать Excel-объект (через CreateObject или GetObject), связав его с переменной-объектом, а далее использовать новый объект в Excel-операциях, напр.

Set clrg = ExcelObj.ActiveSheet.Rows(1).Find(What:=Hdr, LookAt:=xlWhole)

6

Re: Ошибка 91 Обьект переменной или блок

yshindin пишет:
Fck_This пишет:

Run-time error 91. Object variable or with block variable not set (писал по памяти, но думаю всё правильно)

В данном случае это может быть как ошибка компиляции, так и Runtime-error (скорее второе). Вы пишете, что запускается все из Word, но у вас в сбойном операторе указан объект ActiveSheet, который Word не должен понимать.
То есть, я предполагаю, что к моменту исполнения оператора активным Application-объектом является Word (а не Excel), поэтому выдается сообщение об ошибке. Возможно, вы хотели из Word запустить Excel, а в нем выполнить этот поиск. Тогда надо предварительно создать Excel-объект (через CreateObject или GetObject), связав его с переменной-объектом, а далее использовать новый объект в Excel-операциях, напр.

Set clrg = ExcelObj.ActiveSheet.Rows(1).Find(What:=Hdr, LookAt:=xlWhole)

Я так понимаю, имеется в виду
Set ExcelObj = CreateObject("Excel.Application").
Вообще код не мой. Обычно не использую ActiveSheet (вместо этого делаю через назначение Set oList = ). Тем не менее это не объясняет избирательности использования функции. Спасибо за совет.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

7

Re: Ошибка 91 Обьект переменной или блок

И ещё такая проблема. На этот раз код запускается из экселя.

Function GetColumnAddress(ByVal sTarget As String, ByRef oWorkSht As Worksheet)
Dim rCell As Range
Set rCell = oWorkSht.Rows(1).Find(What:=sTarget, LookAt:=xlWhole)
'MsgBox rCell.Address
    GetColumnAddress = Split(oWorkSht.Cells(rCell.Row, rCell.Column).Address, "$")(1)
End Function

Передаю значение текстовое и лист. По итогу rCell высвечивает именно то зачение, которое нужно, но дальше неправильно показывает её адрес. Искомое значение находится в столбце AD, а определяется она как Z. GetColumnAddress показывает 26, а должен вернуть - 30. (в Z столбце "Лист #Д", в AD столбце - "Плёнка") Такие значения как "Тираж" и "Шифр" находит правильно.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

8

Re: Ошибка 91 Обьект переменной или блок

Так понимаю, что надо указывать другие свойства для поиска по AA - и далее

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

9

Re: Ошибка 91 Обьект переменной или блок

Fck_This пишет:

. . .
Искомое значение находится в столбце AD, а определяется она как Z. GetColumnAddress показывает 26, а должен вернуть - 30. (в Z столбце "Лист #Д", в AD столбце - "Плёнка") Такие значения как "Тираж" и "Шифр" находит правильно.
. . .

Я прогнал вот этот код для проверки вашей функции GetColumnAddress и у меня все выдается правильно:

Sub ttf()
Dim ss As String
ss = GetColumnAddress("плёнка", ActiveSheet) '="AD"
ss = GetColumnAddress("Лист #Д", ActiveSheet) '="Z"
End Sub

В чем может быть ваша проблема, мне не понятно. Попробуйте подобрать другие варианты реализации этой функции.

10

Re: Ошибка 91 Обьект переменной или блок

yshindin пишет:
Fck_This пишет:

. . .
Искомое значение находится в столбце AD, а определяется она как Z. GetColumnAddress показывает 26, а должен вернуть - 30. (в Z столбце "Лист #Д", в AD столбце - "Плёнка") Такие значения как "Тираж" и "Шифр" находит правильно.
. . .

Я прогнал вот этот код для проверки вашей функции GetColumnAddress и у меня все выдается правильно:

Sub ttf()
Dim ss As String
ss = GetColumnAddress("плёнка", ActiveSheet) '="AD"
ss = GetColumnAddress("Лист #Д", ActiveSheet) '="Z"
End Sub

В чем может быть ваша проблема, мне не понятно. Попробуйте подобрать другие варианты реализации этой функции.

Получилось получить только перебором ячеек с выделением
Function GetColumnAddress(ByVal sTarget As String, ByRef oWorkSht As Worksheet)
Dim rCell As Range
Dim sAddr As String
Set rCell = oWorkSht.Rows(1).Find(What:=sTarget, Lookat:=xlWhole)
    sAddr = Split(oWorkSht.Cells(rCell.Row, rCell.Column).Address, "$")(1)
    GetColumnAddress = sAddr
If sTarget = "Плёнка" Then
    Range(sAddr & "1").Select
    If Not Selection.Value = "Плёнка" Then
        Dim iLastCol, iCell As Integer
        iLastCol = Cells.SpecialCells(xlLastCell).Column
        iCell = rCell.Column + 1
        For i = iCell To iLastCol
            sAddr = Split(oWorkSht.Cells(rCell.Row, i).Address, "$")(1)
            Range(sAddr & "1").Select
            If Selection.Value = "Плёнка" Then
                GetColumnAddress = Split(oWorkSht.Cells(rCell.Row, i).Address, "$")(1): Exit Function
            End If
        Next i
    End If
End If
End Function

Подозревал группировку столбцов, но нет. Короче приходится пилить из ..вна и палок. Поэтому вопрос открыт.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871