Run time error 91 object variable not set excel vba

Добрый день, уважаемые форумчане.Столкнулся со следующей проблемой. Если я запускаю макрос сразу после открытия файла, в котором он содержится - всё работает как часы. Но если я его повторно запущу, то возникает ошибка: Run-time error '91 Object variable or With block variable not set' в строчке  If rng.Value Like txt & "*" Then. Вопрос: почему ошибка возникает ТОЛЬКО при повторном запуске макроса? Почему переменной rng при повторном запуске не присваивается значение? Объясните, пожалуйста.Часть...
 

cooltouch

Пользователь

Сообщений: 8
Регистрация: 24.10.2014

#1

24.10.2014 11:26:56

Добрый день, уважаемые форумчане.

Столкнулся со следующей проблемой. Если я запускаю макрос сразу после открытия файла, в котором он содержится — всё работает как часы. Но если я его повторно запущу, то возникает ошибка: Run-time error ’91 Object variable or With block variable not set’ в строчке  If rng.Value Like txt & «*» Then. Вопрос: почему ошибка возникает ТОЛЬКО при повторном запуске макроса? Почему переменной rng при повторном запуске не присваивается значение? Объясните, пожалуйста.

Часть макроса, в котором появляется ошибка:

Код
Dim txt As String, rng As Range, I As Integer, n As String, ws As Worksheet
Application.ScreenUpdating = False

n = ActiveSheet.Name
For I = 1 To UBound(Regions) 
    With Workbooks("имя_файла"    .Worksheets("Report 2"    .Range("A:A"    
        txt = CStr(Regions(I))
        Set rng = .find(What:=txt, LookIn:=xlValues)
        If txt <> "Russia|B2B Partner Support" Then
            MsgBox "txt = " & txt               'для тестов
            If rng Is Nothing Then             'для тестов
            MsgBox "Nothing"          'для тестов =========>>>> срабатывает это условие. То есть переменной rng при повторном запуске не присваивается 'значение.
            Else: MsgBox "" & rng.Value   'для тестов
            End If
        Else
            Set rng = .find(What:=txt, LookIn:=xlValues, LookAt:=xlWhole)   
            MsgBox "" & rng.Address    'для тестов ===========================> здесь валится. Оно и понятно, так как rng = Nothing
        End If
        If rng.Value Like txt & "*" Then   '<=====================================или здесь
                Set ws = Worksheets.Add
                ws.Name = txt
                ws.Move After:=Worksheets(n)
        End If
    End With
Next I

Изменено: cooltouch24.10.2014 12:45:11

 

The_Prist

Пользователь

Сообщений: 13997
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#2

24.10.2014 12:12:30

Код
If Not rng is nothing then

И обратите внимание как выглядит мой код и как Ваш. Используйте кнопку <…> для оформления кодов.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

cooltouch

Пользователь

Сообщений: 8
Регистрация: 24.10.2014

#3

24.10.2014 12:21:57

Спасибо. Попробую сформулировать проблему понятнее. Убрал лишнее из макроса, чтобы было нагляднее

Код
Dim txt As String, rng As Range, I As Integer, n As String, ws As Worksheet

n = ActiveSheet.Name
For I = 1 To UBound(Regions)
    With Worksheets("Report 2" .Range("A:A" 
        txt = CStr(Regions(I))
        Set rng = .find(What:=txt, LookIn:=xlValues)
        If rng.Value Like txt & "*" Then         '<<<<============ Если открыть файл и сразу выполнить макрос, всё в порядке. Если запустить макрос повторно вылезет ошибка в этом месте. Если файл снова переоткрыть, макрос сработает. При повторном запуске макроса переменной rng не присваивается значение. Почему?
                Set ws = Worksheets.Add
                ws.Name = txt
                ws.Move After:=Worksheets(n)
        End If
    End With
Next I

Изменено: cooltouch24.10.2014 23:46:09

 

Sanja

Пользователь

Сообщений: 14837
Регистрация: 10.01.2013

Файл-пример можете приложить?

Согласие есть продукт при полном непротивлении сторон.

 

Hugo

Пользователь

Сообщений: 23137
Регистрация: 22.12.2012

#5

24.10.2014 12:38:52

Цитата
cooltouch пишет: Спасибо.

Чисто формально? Подсказку не использовали, код не оформили…

 

The_Prist

Пользователь

Сообщений: 13997
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#6

24.10.2014 12:39:38

Цитата
cooltouch пишет: Попробую сформулировать проблему понятнее

Я, в свою очередь попробую сформулировать свою просьбу понятнее: оформляйте коды ТЕГАМИ. Неужели так трудно выделить текст кода и нажать кнопочку <…>?

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

cooltouch

Пользователь

Сообщений: 8
Регистрация: 24.10.2014

#7

24.10.2014 13:01:57

Исправил отображение. К сожалению, не могу выложить этот файл на форум. Суть в следующем:
1. Открываю файл.
2. Запускаю процедуру, которая вызывает функцию открытия другого файла. Копирую из этого файла два листа в исходный файл.

Код
Option Explicit 
Код
Option Base 1 
Код
Sub Count()
'выбираем файл отчёта и копируем листы "Report 2" и "Data"
Dim FileNameWI As String 'путь к файлу отчёта 
   FileNameWI = GetFilePath("Select WI report", , "Excel", "*.xls"                   'запрашиваем имя файла function GetFilePath
   If FileNameWI = "" Then Exit Sub                                                   'выходим, если пользователь отказался от выбора файла
   'MsgBox "You selected: " & FileName, vbInformation
   With Workbooks.Open(FileNameWI, ReadOnly:=True)                                    'копируем лист
    .Sheets("Report 2".Copy Before:=ThisWorkbook.Sheets(1)
    .Sheets("Data".Copy Before:=ThisWorkbook.Sheets(2)
    .Close
  End With

На листе «Report 2» в столбике A:A находится список неких групп. Мне необходимо для каждой такой группы создать лист в исходном файле с названием, близким к названию этой группы. Названия листов хранятся в массиве.

Код
Dim Regions As Variant
Regions = Array("имя 1", "имя 2")

а далее сам код, где возникает ошибка:

Код
Dim txt As String, rng As Range, I As Integer, n As String, ws As Worksheet
 
n = ActiveSheet.Name
For I = 1 To UBound(Regions)
    With Worksheets("Report 2").Range("A:A")
     txt = CStr(Regions(I))
     Set rng = .find(What:=txt, LookIn:=xlValues)
     If rng.Value Like txt & "*" Then      '<<<<============ Если открыть файл и сразу выполнить макрос, всё в порядке. Если запустить макрос повторно вылезет ошибка в этом месте. Если файл снова переоткрыть, макрос сработает. При повторном запуске макроса переменной rng не присваивается значение. Почему?
          Set ws = Worksheets.Add
          ws.Name = txt
          ws.Move After:=Worksheets(n)
     End If
    End With
Next I

Изменено: cooltouch24.10.2014 13:07:19

 

Ну как-то куски кода в целом сложить непросто, но первый же вопрос: а если на листе Report 2 не будет найдено соответствующее значение txt, чему будет равняться rng?

 

The_Prist

Пользователь

Сообщений: 13997
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#9

24.10.2014 15:07:54

Я уже дал подсказку, как надо проверить. Но почему-то автор не хочет её использовать.
Плюс я не понимаю, зачем эта строка:

Код
If rng.Value Like txt & "*" Then

ведь в rng содержится текст, который равен txt. Следовательно Вы проверяете этим…Что, собственно?
Кстати, по вопросу в первый раз находит, во второй нет: может следует явно указать по целой ячейке ищете или по части?

Код
Set rng = .find(What:=txt, LookIn:=xlValues,LookAt:=xlWhole)'если по части ячейки - LookAt:=xlPart

а то во время работы эти настройки могут быть изменены и не указывая их принудительно Вы ищите с теми параметрами, которые были установлены по время работы с листом/книгой.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

cooltouch

Пользователь

Сообщений: 8
Регистрация: 24.10.2014

#10

24.10.2014 17:39:29

Извините, кнопка «Цитировать» у меня почему-то корректно не работает (по нажатию ничего не происходит, Chrome Версия 38.0.2125.104 m)
Отвечаю по пунктам:

Цитата
1. а если на листе Report 2 не будет найдено соответствующее значение txt, чему будет равняться rng?

Выдаёт ту же ошибку, что и в топике. Я немного ковырял в эту сторону. После повторного запуска макроса после строчки
txt = CStr(Regions(I))  добавлял MsgBox txt.

Код
txt = CStr(Regions(I))
MsgBox "txt = " txt  'Сообщение успешно отображало нужное значение. Но сам я склонен думать, что проблема где-то здесь
Set rng = .find(What:=txt, LookIn:=xlValues) 'это отрабатывает 
If rng.Value Like txt & "*" Then ' а здесь ошибка

2. Про

Код
If rng.Value Like txt & "*" Then

Это мой частный случай. На всякий случай убрал & «*», но результата это не дало. Оно и понятно, эта строчка стоит ниже строчки кода, на которой отваливается макрос.

Цитата
3. Кстати, по вопросу в первый раз находит, во второй нет: может следует явно указать по целой ячейке ищете или по части?

Опять же, это мой частный случай. Пробовал играться, но результата это не принесло.
4. Про подсказку

Код
If Not rng is nothing then

не понял. В первом моём сообщение как раз аналогичная структура.

Код
      If txt <> "Russia|B2B Partner Support" Then
      MsgBox "txt = " & txt         'для тестов
      If rng Is Nothing Then       'для тестов
      MsgBox "Nothing"       'для тестов =========>>>> срабатывает это условие. То есть переменной rng при повторном запуске не присваивается 'значение.
      Else: MsgBox "" & rng.Value   'для тестов
      End If

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

 

The_Prist

Пользователь

Сообщений: 13997
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Без файла точно никто ничего больше не скажет. Сидеть и гадать не о чем, т.к. дело скорее всего еще в каких-то действиях и искомый текст уже не находится.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Юрий М

Модератор

Сообщений: 60390
Регистрация: 14.09.2012

Контакты см. в профиле

#12

24.10.2014 18:38:59

Цитата
cooltouch пишет: не могу выложить файл по соображениям корпоративной политики

Меняйте патроны на апельсины.

 

cooltouch

Пользователь

Сообщений: 8
Регистрация: 24.10.2014

#13

27.10.2014 13:22:21

Здравствуйте,
спешу сообщить, что решил свою проблему. Изменил

Код
Set rng = .find(What:=txt, LookIn:=xlValues)

на

Код
Set rng = .find(What:=txt, LookIn:=xlValues, LookAt:=xlPart)

и ошибка ушла. Спасибо The_Prist. Видимо действительно проблема была в

Цитата
The_Prist пишет:
а то во время работы эти настройки могут быть изменены и не указывая их принудительно Вы ищите с теми параметрами, которые были установлены по время работы с листом/книгой.

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

Попутный вопрос… удален

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

cooltouch, одна тема — один вопрос. Создавайте новую тему, но перед этим почитайте форум — возможно уже есть ответ на Ваш вопрос.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

venrt

Пользователь

Сообщений: 54
Регистрация: 29.03.2017

#15

29.01.2019 12:09:49

Добрый день.
Тоже борюсь с похожей ошибкой.
Есть код:

Код
Set findT = Worksheets(i).Range("E:H").Find("Полная нагрузка с потерями", , xlValues, xlPart)
    ' поиск количества вхождений
  If Not findT Is Nothing Then
    Adres = findT.Address
    Do
      cnt = cnt + 1
      Set findT = Worksheets(i).Range("E:H").FindNext(findT)
      Loop While Not findT Is Nothing And findT.Address <> Adres
  Else
    MsgBox "Не найдено на листе: " & Worksheets(i).Name
    Exit Sub
  End If

Если на нужном листе текст поиска встречается один раз, то на Loop While вылетает с этой ошибкой, если больше одного раза, то все норм.

Причем в других книгах все нормально срабатывало с любым кол-ом вхождений.

Изменено: venrt29.01.2019 12:10:29

 

Nordheim

Пользователь

Сообщений: 3154
Регистрация: 18.04.2017

venrt, Файл пример в студию.

«Все гениальное просто, а все простое гениально!!!»

 

venrt

Пользователь

Сообщений: 54
Регистрация: 29.03.2017

Nordheim,прикладываю файл

Прикрепленные файлы

  • пример.xlsm (46.99 КБ)

 

Віталій

Пользователь

Сообщений: 9
Регистрация: 28.10.2021

Добрый день. Столкнулся с такой проблемой при открытии файла запускается макрос и появляется ошибка «runtime Error 91». А когда любой другой файл excel открыт то ошибки уже нет. Прошу прощения я в пока в VBA пока полный профан. Рад буду любой помощи. Всем СПС.

Прикрепленные файлы

  • 2.xlsm (24.76 КБ)
  • 1.jpg (12.49 КБ)

 

см. вложение

Прикрепленные файлы

  • 2.xlsm (22.02 КБ)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Віталій

Пользователь

Сообщений: 9
Регистрация: 28.10.2021

#20

03.05.2022 19:29:55

Цитата
написал:
см. вложение

Спасибо но вы удалили макрос который должен сортировать при открытии файла колонку под кнопкой ДН . Так у меня тоже работает. Идея была такой что бы макрос сортировал при открытии файла  и оставалась возможность запуска макроса по нажатия функциональных кнопок. Если возможно это как то реализовать буду очень рад. Спасибо что откликнулись.  

 

Віталій

Пользователь

Сообщений: 9
Регистрация: 28.10.2021

Ігор Гончаренко, Спасибо но вы удалили макрос который должен сортировать при открытии файла колонку под кнопкой ДН . Так у меня тоже работает. Идея была такой что бы макрос сортировал при открытии файла  и оставалась возможность запуска макроса по нажатия функциональных кнопок. Если возможно это как то реализовать буду очень рад. Спасибо что откликнулись.  

 

верните в макрос обратно
сохраните, закройте, откройте

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Віталій

Пользователь

Сообщений: 9
Регистрация: 28.10.2021

Ігор Гончаренко, опять ругается, может я криворукий.

Прикрепленные файлы

  • 3.jpg (142.76 КБ)
  • 2.xlsm (24.72 КБ)

 

Ігор Гончаренко

Пользователь

Сообщений: 13265
Регистрация: 01.01.1970

#24

03.05.2022 20:12:18

модуль ЭтаКнига  напишите так:

Код
Private Sub Workbook_Open()
  Application.OnTime Now + 4 / 24 / 3600, "Сортувати"
End Sub

и ничего более

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Віталій

Пользователь

Сообщений: 9
Регистрация: 28.10.2021

Ігор Гончаренко,
только что попробовал запустить исходный файл все заработало без правок ,странно, удалил перед этим надстройку, может в этом была проблема . Спасибо тебе добрый человек, ОГРОМНОЕ СПАСИБО!!!
На этом форуме есть  рейтинг ?

 

Ігор Гончаренко

Пользователь

Сообщений: 13265
Регистрация: 01.01.1970

#26

03.05.2022 21:18:26

ваши слова формируют мой рейтинг)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

Overview

VBA run-time error 91 is a common trappable error seen in VBA development. This error is triggered when you try to use an object variable (i.e. a variable which is of the “Object” type) that has no object (properly) assigned to it.

This error is a very common technical error which can often be encountered by beginners and even experienced programmers. Therefore, it is useful that you understand it, learn about how it is triggered, and how to work around it. This knowledge will help you in your development as a programmer in Microsoft Office.

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

Key Concept Before We Start — Value Assignment to Variables in VBA

Before we look into the topic of Error 91, let’s go through a very important coding concept in VBA about value assignment to variables. There are two main types of value assignment, which you can think of as (1) “object” and (2) “non-object”. You can see in the table below that for all variables which are non-objects, we simply use “=” to assign values to them. However, for object variables, we must always begin the assignment with “Set“.

Variable Type Scope VBA syntax / treatment
Normal (Non-Objects) Any variable type that is not an object, e.g. integer, long, string, variate, etc. Syntax: Set MyVariable = YourValue  
Example: Dim x As Integer x = 123
Objects All variables which are objects. e.g. range, application, collection, etc. Syntax: Set MyObject = YourObject
' Assign object reference  
Set MyObject = Nothing
' Discontinue association  

Example 1:
Dim x as Range Set x = ThisWorkbook.Worksheets(1)  
Example 2:
Dim dict As Scripting.Dictionary Set dict = New Scripting.Dictionary

You can now see why Error 91 is called “Object variable not Set”.  It is because you should assign an object to an object variable with the SET statement.

So How is Error 91 Triggered?

There are four main reasons you might encounter this error:

  1. “Set” is omitted in the assignment of an object variable
  2. Using GoTo to jump into a “With” block
  3. Attempting to use an object variable that has been set to Nothing.
  4. Attempting to use an object which is not yet being created

Scenario 1: “Set” is Omitted in the Reference to an Object Variable

The macro “example1” below shows the most straightforward scenario when Error 91 can be triggered. The variable “MyObject” is an object variable. In line 4, “MyObject = ActiveSheet” attempts to assign a worksheet object (the ActiveSheet) to MyObject. Because the SET statement was omitted, this line of code causes Error 91 during run time.

Sub example1()
Dim MyObject As Object   'Create object variable
Dim x As String
MyObject = ActiveSheet   'Create object reference [Err 91 here]
x = MyObject.Name        'Assign Count value to x
MsgBox "Sheet name is: " &amp;amp;amp;amp; x
End Sub

Solution:

To avoid making this mistake, you must always remember to use a Set statement to assign an object to an object variable.

See the correct way of object variable assignment with a Set statement in line 4 below:

Sub example1_fixed()
Dim MyObject As Object    	'Create object variable
Dim x  As String
Set MyObject = ActiveSheet	'Create object reference the correct way
x = MyObject.Name        	'Assign Count value to x
MsgBox "Sheet name is: " &amp;amp;amp;amp; x
End Sub

Scenario 2: Using GoTo to Jump into a “With” Block

If a GoTo statement jumps into a With block, it may cause Error 91. See the example below:

Sub BadJumper()
    Dim x As Integer    'counter for use with for loop
    Dim result As String
    x = WorksheetFunction.RandBetween(1, 10) 'Draw integer between 1&amp;amp;amp;amp;10
    If x &amp;amp;amp;gt; 5 Then
        GoTo jumper1   'Jump if x &amp;amp;amp;gt;5
    Else
        End			'Terminate macro if x&amp;amp;amp;lt;=5
    End If
    With Range("A1")
jumper1:
        .Value = x 	'place rolling total [Err 91 here]
    End With
End Sub

In line 6, the GoTo statement jumps to “jumper1” when x>5. The With statement in line 10 is bypassed and the process jumps straight to line 12 which is supposed to put the value of x into cell A1. Error 91 will be trigger right there.

Having the With statement (line 10) bypassed, Excel has no idea what object the “Value” property (line 12) refers to, and therefore has no idea where to place the value of x.

Solution:

To avoid this mistake, make sure your GoTo statements never jump directly inside a WITH block.

Scenario 3: Attempting to Use an Object Variable that Has Been Set to Nothing.

Error 91 can also be triggered when the code attempts to use an object variable that has been set to “Nothing”. (i.e. the object variable has been reset/erased.)

In line 5 of the macro below, the object variable “MyObject” has been reset by the statement “Set MyObject = Nothing“. Error 91 will happen in line 6 (when the code tries to display the name of MyObject in a Msgbox). This is equivalent to having an blank object variable which has nothing assigned to it.

Sub example3()
Dim MyObject As Object      'Create object variable.
Set MyObject = ActiveSheet  'Create valid object reference.
MsgBox "Sheet name is: " &amp;amp;amp;amp; MyObject.Name
Set MyObject = Nothing
MsgBox "Sheet name is: " &amp;amp;amp;amp; MyObject.Name	'[Err 91 here]
End Sub

Solution:

After resetting an object variable by setting it to nothing, make sure you re-assign an object to it (with a Set statement) before calling it.

Scenario 4: Attempting to Use an Object which Is Not Yet Created During Run-Time

The previous examples showed Error 91 scenarios in which objects have not been properly assigned to object variables. There are situations where Error 91 is triggered because the object has not been created.

This scenario normally applies to objects which are not under any of the Microsoft Office Application objects. For instance, (1) generic Visual Basic objects (such as Collection, Dictionary) or (2) Objects in libraries added through “Add Reference”.

Example (part 1):

The two macros below “ex4_Collection” and “ex4_Dictionary” contain very typical mistakes made by VBA programmers when using Collections and Dictionaries. In line 2 of both macros, the objects were declared, and then values are being added to the Collection/Dictionary in line 3, where Error 91 occurred.

Sub ex4_Collection()
Dim MyCollection1 As Collection
MyCollection1.Add Item:=123		'[Err 91 here]
End Sub 
Sub ex4_Dictionary()
Dim dict As Scripting.Dictionary
dict.Add "key1", 123		'[Err 91 here]
End Sub

Solution:

To fix the macro, you need to learn the syntax to create a new instance of the object.  See below how the two macros are fixed by inserted a new Set statement in line 3 of both macros.

Sub ex4_Collection_fixed ()
Dim MyCollection1 As Collection
Set MyCollection1 = New Collection   'create the Collection
MyCollection1.Add Item:=123
End Sub
Sub ex4_Dictionary_fixed()
Dim dict As Scripting.Dictionary
Set dict = New Scripting.Dictionary	'create the Dictionary
dict.Add "key1", 123
End Sub

Example (part 2):

Here is another very common case when a reference to a library is added. For example, the Office library is added through “Add Reference” from the Tools menu in VB Editor:

add office object library via references

The macro below tries to create a Mail item. But Error 91 will be triggered in line 3. The macro seems perfectly fine, where the Outlook application object and the MailItem object have been declared, and then a Set statement is used to create a Mail item. But why there is still the Error 91?

Sub ex4_Outlook()
  Dim OutlookApp As Outlook.Application
  Dim OutlookMail As Outlook.MailItem
  Set OutlookMail = OutlookApp.CreateItem(olMailItem)
End Sub

The macro below shows the correct approach to create such an (early binding) instance of the Outlook application object. See how line 3 has been added?

Sub ex4_Outlook_fixed()
  Dim OutlookApp As Outlook.Application
  Dim OutlookMail As Outlook.MailItem

  Set OutlookApp = New Outlook.Application  'create Outlook App
  Set OutlookMail = OutlookApp.CreateItem(olMailItem)
End Sub

The skills to interact with object variables is crucial in VBA development and successful declaration and assignment are the first steps. Understanding the above scenarios can for sure help you program more efficiently in VBA.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Sub SAVE_CHANGES()
    Dim CurADNumber As String
    Dim RezPoiskaAD As Range
    Dim FindedRow As Long
    
    CurADNumber = Me.TextBox_AD_CN_No.Value
    If CurADNumber <> "" Then
        With ThisWorkbook.Worksheets("AD_EVALUATION_STATUS")
            .Unprotect Password:="123"
            Set RezPoiskaAD = .Columns(1).Find(What:=CurADNumber, LookIn:=xlFormulas, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)
            If Not RezPoiskaAD Is Nothing Then
                FindedRow = RezPoiskaAD.Row
                .Cells(FindedRow, .Rows(2).Find("AMENDMENT").Column) = Me.TextBox_AMENDMENT.Value
                .Cells(FindedRow, .Rows(2).Find("EFFECTIVE DATE").Column) = CDate(Me.TextBox_EFFECTIVE_DATE)
                .Cells(FindedRow, .Rows(2).Find("SUPERSEDES").Column) = Me.TextBox_SUPERSEDES.Value
                .Cells(FindedRow, .Rows(2).Find("SUBJECT").Column) = Me.TextBox_SUBJECT.Value
                
                If Me.OptionButton_ONE_TIME.Value = True Then
                    .Cells(FindedRow, .Rows(2).Find("ONE TIME").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("ONE TIME").Column) = ""
                End If
                
                If Me.OptionButton_REPETITIVE.Value = True Then
                    .Cells(FindedRow, .Rows(2).Find("REPETETIVE").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("REPETETIVE").Column) = ""
                End If
                
                If Me.OptionButton_OPTIONAL.Value = True Then
                    .Cells(FindedRow, .Rows(2).Find("OPTIONAL").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("OPTIONAL").Column) = ""
                End If
                
                If Me.CheckBox_AIRFRAME.Value = True Then
                    .Cells(FindedRow, .Rows(2).Find("AIRFRAME").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("AIRFRAME").Column) = ""
                End If
                
                If Me.CheckBox_APPLIANCE.Value = True Then
                    .Cells(FindedRow, .Rows(2).Find("APPLIANCE").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("APPLIANCE").Column) = ""
                End If
                
                If Me.CheckBox_ENGINE.Value = True Then
                    .Cells(FindedRow, .Rows(2).Find("ENGINE").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("ENGINE").Column) = ""
                End If
                
                .Cells(FindedRow, .Rows(2).Find("REMARKS").Column) = Me.TextBox_APPLICABILITY_REMARKS.Value
                .Cells(FindedRow, .Rows(2).Find("REFERENCES").Column) = Me.TextBox_REFERENCE.Value
                .Cells(FindedRow, .Rows(2).Find("THRESHOLD").Column) = Me.TextBox_THRESHOLD.Value
                .Cells(FindedRow, .Rows(2).Find("DEADLINE").Column) = Me.TextBox_DEADLINE.Value
                .Cells(FindedRow, .Rows(2).Find("INTERVAL").Column) = Me.TextBox_INTERVAL.Value
                .Cells(FindedRow, .Rows(2).Find("EO REF").Column) = Me.TextBox_EO_REF.Value
                .Cells(FindedRow, .Rows(2).Find("TASK CARD").Column) = Me.TextBox_TASK_CARD.Value
                
                If Me.CheckBox_0157.Value = True Then
                    .Cells(FindedRow, .Rows(2).Find("0157").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("0157").Column) = ""
                End If
                
                If Me.CheckBox_0277.Value = True Then
                   .Cells(FindedRow, .Rows(2).Find("0277").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("0277").Column) = ""
                End If
                
                If Me.CheckBox_0292.Value = True Then
                    .Cells(FindedRow, .Rows(2).Find("0292").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("0292").Column) = ""
                End If
                
                If Me.CheckBox_24837.Value = True Then
                    .Cells(FindedRow, .Rows(2).Find("24837").Column) = "X"
                Else
                    .Cells(FindedRow, .Rows(2).Find("24837").Column) = ""
                End If
                
                .Cells(FindedRow, .Rows(2).Find("DESCRIPTION").Column) = Me.TextBox_DESCRIPTION.Value
                .Cells(FindedRow, .Rows(2).Find("EVALUATED BY Name").Column) = Me.TextBox_EVALUATED_BY_NAME.Value
                .Cells(FindedRow, .Rows(2).Find("EVALUATED BY Date").Column) = Me.TextBox_EVALUATED_BY_DATE.Value
                .Cells(FindedRow, .Rows(2).Find("DUPLICATED EVALUATION Name").Column) = Me.TextBox_DUPLICATED_BY_NAME.Value
                .Cells(FindedRow, .Rows(2).Find("DUPLICATED EVALUATION Date").Column) = Me.TextBox_DUPLICATED_BY_DATE.Value
            End If
            .Protect Password:="123"
        End With
    Else
        MsgBox "(AD/CN No) field is empty, please fill it before save"
    End If
End Sub

Today we are with our another error solving article, & here we are going to show you & solve your VBA Runtime Error 91 Windows PC code problem from your Windows PC permanently. So, for that, all you have to do is just read and check out this below post once entirely fast so that you can surely grab some neat, natural solutions and the methods for getting rid out of this type of Error 91 Excel VBA problem.

This shows an error code message like,

Runtime Error 91

Object variable or With the block variable not set

This Error 91 object variable or with block variable set suddenly occurs when you are starting any program. This error is a significant error code problem on many of the users PC. This error is a common error problem on the Windows-based systems that usually appear randomly. This Error Code 91 may encounter with the Microsoft products. Old or corrupted registry keys may also cause this error. This error problem includes PC freezes, crashes & the possible virus infection. This issue even the result of coding errors in the app. This VBA Runtime Error 91 Windows problem appears to be due to the insufficient access rights on the PC.

Causes of VBA Runtime Error 91 Windows Code Issue:

  • When opening Excel
  • Runtime error

So, here are some quick tips and tricks for efficiently fixing and resolve this type of Error 91 Windows PC Code problem from you permanently.

How to Fix & Solve VBA Runtime Error 91 Windows Code Problem

1. Change DCOMCnfg.exe Settings –

Ensure that DCOMCnfg.exe file is set to allow “Everyone” to use it so that you can quickly fix and solve this VBA Runtime Error 91 Windows code problem from your PC.

2. By using this below Command on the RUN –

By using this below Command in the RUN

  • Go to the start menu
  • Search for RUN & open it
  • Type this below the following command in the Run window
    Regsvr32 c:windowssystem32scrrun.dll
  • Now, then click OK there
  • After completing, just close the tab
  • That’s it, done

By using this above command in the RUN can get back you from this VBA Runtime Error 91 Windows code problem.

3. Perform a full Windows PC Scan for Viruses or Malware –

Perform a full PC scan for viruses

  • Go to the Start Menu
  • Search for ‘Microsoft Security Essentials‘ & open it
  • Click on the “Scan Now” option
  • Before clicking on the ‘Scan Now‘ button,
  • Check that ‘Full‘ Scan option is selected already while scanning
  • That’s it, Done

It will perform a full PC scan for the viruses on your computer to fix this Runtime Error 91 excel vba problems.

4. Use a Registry Cleaner to Clean all the Registry of your Windows PC –

Clean or Restore the Registry

Clean your registry by any registry cleaner software so that it can fix and solve this VBA excel Runtime Error 91 Windows problem from your PC completely.

5. Disable the Script Debugging on the Internet Explorer –

Disable the Script Debugging on the Internet Explorer

  • Go to your Internet Explorer
  • Now, go to the Tools option there
  • Click on ‘Internet Options’ there
  • Now, click on the Advanced tab there
  • Now, scroll down to the Browsing
  • &, click on Disable Script Debugging to disable it
  • After completing, close the tab
  • That’s it, done

By disabling the script debugging on the Internet Explorer browser can fix and solve this Error 91 Excel VBA code problem from your PC.

These are the quick and the best way methods to get quickly rid out of this VBA Runtime Error 91 Windows PC Code problem from you entirely. Hope these solutions will surely help you to get back from this Error 91 object variable not set issue.

If you are facing or falling in this VBA Runtime Error 91 Windows PC Code problem or any error problem, then comment down the error problem below so that we can fix and solve it too by our top best quick methods guides.

Error: Ошибка 91 — Чтобы создать объектную переменную, нужно выполнить два шага. Сначала вы должны объявить объектную переменную. Затем вы должны назначить действительную ссылку на объектную переменную с помощью оператора Set. Аналогично, блок With … End With должен быть инициализирован путем выполнения

В этой статье представлена ошибка с номером Ошибка 91, известная как Переменная объекта или переменная блока не задана, описанная как Чтобы создать объектную переменную, нужно выполнить два шага. Сначала вы должны объявить объектную переменную. Затем вы должны назначить действительную ссылку на объектную переменную с помощью оператора Set. Аналогично, блок With … End With должен быть инициализирован путем выполнения

О программе Runtime Ошибка 91

Время выполнения Ошибка 91 происходит, когда Windows дает сбой или падает во время запуска, отсюда и название. Это не обязательно означает, что код был каким-то образом поврежден, просто он не сработал во время выполнения. Такая ошибка появляется на экране в виде раздражающего уведомления, если ее не устранить. Вот симптомы, причины и способы устранения проблемы.

Определения (Бета)

Здесь мы приводим некоторые определения слов, содержащихся в вашей ошибке, в попытке помочь вам понять вашу проблему. Эта работа продолжается, поэтому иногда мы можем неправильно определить слово, так что не стесняйтесь пропустить этот раздел!

  • Назначить — что-то, что связано с операцией присваивания, т. е. процессом изменения содержимого переменной для отражения некоторого заданного значения.
  • Блок < / b> — этот тег записывается, потому что он может относиться ко многим различным вещам в зависимости от использования с ним других тегов.
  • Объявить — используйте этот тег для вопросов, связанных с declare, который обычно предназначен для объявления переменных, операторов и т. д.
  • Object — объект — это любой объект, которым можно управлять с помощью команд на языке программирования.
  • < li> Ссылка. Ссылка — это значение, которое позволяет программе косвенно обращаться к определенным данным, таким как переменная или запись, в памяти компьютера или в каком-либо другом запоминающем устройстве.

  • Набор — набор — это набор, в котором ни один элемент не повторяется, который может иметь возможность перечислять свои элементы в соответствии с критерием упорядочения «упорядоченный набор» или не сохранять порядок «неупорядоченный набор». «.
  • Переменная — ЭТО НЕОБХОДИМО ; ИСПОЛЬЗУЙТЕ КОНКРЕТНЫЕ ЯЗЫКОВЫЕ ТЭГИ, ЕСЛИ ПРИМЕНИМО

Симптомы Ошибка 91 — Переменная объекта или переменная блока не задана

Ошибки времени выполнения происходят без предупреждения. Сообщение об ошибке может появиться на экране при любом запуске %программы%. Фактически, сообщение об ошибке или другое диалоговое окно может появляться снова и снова, если не принять меры на ранней стадии.

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

Fix Переменная объекта или переменная блока не задана (Error Ошибка 91)
(Только для примера)

Причины Переменная объекта или переменная блока не задана — Ошибка 91

При разработке программного обеспечения программисты составляют код, предвидя возникновение ошибок. Однако идеальных проектов не бывает, поскольку ошибки можно ожидать даже при самом лучшем дизайне программы. Глюки могут произойти во время выполнения программы, если определенная ошибка не была обнаружена и устранена во время проектирования и тестирования.

Ошибки во время выполнения обычно вызваны несовместимостью программ, запущенных в одно и то же время. Они также могут возникать из-за проблем с памятью, плохого графического драйвера или заражения вирусом. Каким бы ни был случай, проблему необходимо решить немедленно, чтобы избежать дальнейших проблем. Ниже приведены способы устранения ошибки.

Методы исправления

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

Если метод ремонта вам подошел, пожалуйста, нажмите кнопку upvote слева от ответа, это позволит другим пользователям узнать, какой метод ремонта на данный момент работает лучше всего.

Обратите внимание: ни ErrorVault.com, ни его авторы не несут ответственности за результаты действий, предпринятых при использовании любого из методов ремонта, перечисленных на этой странице — вы выполняете эти шаги на свой страх и риск.

Метод 1 — Закройте конфликтующие программы

Когда вы получаете ошибку во время выполнения, имейте в виду, что это происходит из-за программ, которые конфликтуют друг с другом. Первое, что вы можете сделать, чтобы решить проблему, — это остановить эти конфликтующие программы.

  • Откройте диспетчер задач, одновременно нажав Ctrl-Alt-Del. Это позволит вам увидеть список запущенных в данный момент программ.
  • Перейдите на вкладку «Процессы» и остановите программы одну за другой, выделив каждую программу и нажав кнопку «Завершить процесс».
  • Вам нужно будет следить за тем, будет ли сообщение об ошибке появляться каждый раз при остановке процесса.
  • Как только вы определите, какая программа вызывает ошибку, вы можете перейти к следующему этапу устранения неполадок, переустановив приложение.

Метод 2 — Обновите / переустановите конфликтующие программы

Использование панели управления

  • В Windows 7 нажмите кнопку «Пуск», затем нажмите «Панель управления», затем «Удалить программу».
  • В Windows 8 нажмите кнопку «Пуск», затем прокрутите вниз и нажмите «Дополнительные настройки», затем нажмите «Панель управления»> «Удалить программу».
  • Для Windows 10 просто введите «Панель управления» в поле поиска и щелкните результат, затем нажмите «Удалить программу».
  • В разделе «Программы и компоненты» щелкните проблемную программу и нажмите «Обновить» или «Удалить».
  • Если вы выбрали обновление, вам просто нужно будет следовать подсказке, чтобы завершить процесс, однако, если вы выбрали «Удалить», вы будете следовать подсказке, чтобы удалить, а затем повторно загрузить или использовать установочный диск приложения для переустановки. программа.

Использование других методов

  • В Windows 7 список всех установленных программ можно найти, нажав кнопку «Пуск» и наведя указатель мыши на список, отображаемый на вкладке. Вы можете увидеть в этом списке утилиту для удаления программы. Вы можете продолжить и удалить с помощью утилит, доступных на этой вкладке.
  • В Windows 10 вы можете нажать «Пуск», затем «Настройка», а затем — «Приложения».
  • Прокрутите вниз, чтобы увидеть список приложений и функций, установленных на вашем компьютере.
  • Щелкните программу, которая вызывает ошибку времени выполнения, затем вы можете удалить ее или щелкнуть Дополнительные параметры, чтобы сбросить приложение.

Метод 3 — Обновите программу защиты от вирусов или загрузите и установите последнюю версию Центра обновления Windows.

Заражение вирусом, вызывающее ошибку выполнения на вашем компьютере, необходимо немедленно предотвратить, поместить в карантин или удалить. Убедитесь, что вы обновили свою антивирусную программу и выполнили тщательное сканирование компьютера или запустите Центр обновления Windows, чтобы получить последние определения вирусов и исправить их.

Метод 4 — Переустановите библиотеки времени выполнения

Вы можете получить сообщение об ошибке из-за обновления, такого как пакет MS Visual C ++, который может быть установлен неправильно или полностью. Что вы можете сделать, так это удалить текущий пакет и установить новую копию.

  • Удалите пакет, выбрав «Программы и компоненты», найдите и выделите распространяемый пакет Microsoft Visual C ++.
  • Нажмите «Удалить» в верхней части списка и, когда это будет сделано, перезагрузите компьютер.
  • Загрузите последний распространяемый пакет от Microsoft и установите его.

Метод 5 — Запустить очистку диска

Вы также можете столкнуться с ошибкой выполнения из-за очень нехватки свободного места на вашем компьютере.

  • Вам следует подумать о резервном копировании файлов и освобождении места на жестком диске.
  • Вы также можете очистить кеш и перезагрузить компьютер.
  • Вы также можете запустить очистку диска, открыть окно проводника и щелкнуть правой кнопкой мыши по основному каталогу (обычно это C :)
  • Щелкните «Свойства», а затем — «Очистка диска».

Метод 6 — Переустановите графический драйвер

Если ошибка связана с плохим графическим драйвером, вы можете сделать следующее:

  • Откройте диспетчер устройств и найдите драйвер видеокарты.
  • Щелкните правой кнопкой мыши драйвер видеокарты, затем нажмите «Удалить», затем перезагрузите компьютер.

Метод 7 — Ошибка выполнения, связанная с IE

Если полученная ошибка связана с Internet Explorer, вы можете сделать следующее:

  1. Сбросьте настройки браузера.
    • В Windows 7 вы можете нажать «Пуск», перейти в «Панель управления» и нажать «Свойства обозревателя» слева. Затем вы можете перейти на вкладку «Дополнительно» и нажать кнопку «Сброс».
    • Для Windows 8 и 10 вы можете нажать «Поиск» и ввести «Свойства обозревателя», затем перейти на вкладку «Дополнительно» и нажать «Сброс».
  2. Отключить отладку скриптов и уведомления об ошибках.
    • В том же окне «Свойства обозревателя» можно перейти на вкладку «Дополнительно» и найти пункт «Отключить отладку сценария».
    • Установите флажок в переключателе.
    • Одновременно снимите флажок «Отображать уведомление о каждой ошибке сценария», затем нажмите «Применить» и «ОК», затем перезагрузите компьютер.

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

Другие языки:

How to fix Error 91 (Object variable or With block variable not set) — There are two steps to creating an object variable. First you must declare the object variable. Then you must assign a valid reference to the object variable using the Set statement. Similarly, a With…End With block must be initialized by executing the
Wie beheben Fehler 91 (Objektvariable oder With-Blockvariable nicht gesetzt) — Es gibt zwei Schritte, um eine Objektvariable zu erstellen. Zuerst müssen Sie die Objektvariable deklarieren. Anschließend müssen Sie der Objektvariablen mit der Set-Anweisung eine gültige Referenz zuweisen. Ebenso muss ein With…End With-Block initialisiert werden, indem die
Come fissare Errore 91 (Variabile oggetto o Con variabile di blocco non impostata) — Ci sono due passaggi per creare una variabile oggetto. Per prima cosa devi dichiarare la variabile oggetto. Quindi è necessario assegnare un riferimento valido alla variabile oggetto utilizzando l’istruzione Set. Allo stesso modo, un blocco With…End With deve essere inizializzato eseguendo il comando
Hoe maak je Fout 91 (Object variabele of met blok variabele niet ingesteld) — Er zijn twee stappen om een ​​objectvariabele te maken. Eerst moet u de objectvariabele declareren. Vervolgens moet u een geldige verwijzing naar de objectvariabele toewijzen met behulp van de Set-instructie. Op dezelfde manier moet een With…End With-blok worden geïnitialiseerd door de
Comment réparer Erreur 91 (Variable objet ou Variable avec bloc non définie) — Il y a deux étapes pour créer une variable d’objet. Vous devez d’abord déclarer la variable objet. Ensuite, vous devez affecter une référence valide à la variable objet à l’aide de l’instruction Set. De même, un bloc With…End With doit être initialisé en exécutant la commande
어떻게 고치는 지 오류 91 (개체 변수 또는 With 블록 변수가 설정되지 않았습니다.) — 개체 변수를 만드는 데는 두 단계가 있습니다. 먼저 객체 변수를 선언해야 합니다. 그런 다음 Set 문을 사용하여 개체 변수에 유효한 참조를 할당해야 합니다. 마찬가지로 With…End With 블록은 다음을 실행하여 초기화해야 합니다.
Como corrigir o Erro 91 (Variável de objeto ou com variável de bloco não definida) — Existem duas etapas para criar uma variável de objeto. Primeiro você deve declarar a variável do objeto. Em seguida, você deve atribuir uma referência válida à variável de objeto usando a instrução Set. Da mesma forma, um bloco With … End With deve ser inicializado executando o
Hur man åtgärdar Fel 91 (Objektvariabel eller Med blockvariabel ej inställd) — Det finns två steg för att skapa en objektvariabel. Först måste du deklarera objektvariabeln. Sedan måste du tilldela en giltig referens till objektvariabeln med Set -satsen. På samma sätt måste ett With … End With block initieras genom att köra
Jak naprawić Błąd 91 (Zmienna obiektu lub Zmienna blokowa nie jest ustawiona) — Tworzenie zmiennej obiektowej składa się z dwóch kroków. Najpierw musisz zadeklarować zmienną obiektu. Następnie należy przypisać prawidłowe odwołanie do zmiennej obiektu za pomocą instrukcji Set. Podobnie blok With…End With musi zostać zainicjowany przez wykonanie
Cómo arreglar Error 91 (Variable de objeto o con variable de bloque no establecida) — Hay dos pasos para crear una variable de objeto. Primero debes declarar la variable de objeto. Luego debe asignar una referencia válida a la variable de objeto usando la instrucción Set. De manera similar, un bloque With … End With debe inicializarse ejecutando el

The Author Об авторе: Фил Харт является участником сообщества Microsoft с 2010 года. С текущим количеством баллов более 100 000 он внес более 3000 ответов на форумах Microsoft Support и создал почти 200 новых справочных статей в Technet Wiki.

Следуйте за нами: Facebook Youtube Twitter

Последнее обновление:

24/10/22 12:05 : Пользователь Windows 10 проголосовал за то, что метод восстановления 4 работает для него.

Рекомендуемый инструмент для ремонта:

Этот инструмент восстановления может устранить такие распространенные проблемы компьютера, как синие экраны, сбои и замораживание, отсутствующие DLL-файлы, а также устранить повреждения от вредоносных программ/вирусов и многое другое путем замены поврежденных и отсутствующих системных файлов.

ШАГ 1:

Нажмите здесь, чтобы скачать и установите средство восстановления Windows.

ШАГ 2:

Нажмите на Start Scan и позвольте ему проанализировать ваше устройство.

ШАГ 3:

Нажмите на Repair All, чтобы устранить все обнаруженные проблемы.

СКАЧАТЬ СЕЙЧАС

Совместимость

Требования

1 Ghz CPU, 512 MB RAM, 40 GB HDD
Эта загрузка предлагает неограниченное бесплатное сканирование ПК с Windows. Полное восстановление системы начинается от $19,95.

ID статьи: ACX09108RU

Применяется к: Windows 10, Windows 8.1, Windows 7, Windows Vista, Windows XP, Windows 2000

Логотипы Microsoft и Windows® являются зарегистрированными торговыми марками Microsoft. Отказ от ответственности: ErrorVault.com не связан с Microsoft и не заявляет о такой связи. Эта страница может содержать определения из https://stackoverflow.com/tags по лицензии CC-BY-SA. Информация на этой странице представлена исключительно в информационных целях. © Copyright 2018

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 02.03.2018 11:05:02

  • Ошибка 91 Обьект переменной или блок
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

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

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

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

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

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

2 Ответ от Fck_This 02.03.2018 11:14:51

  • Ошибка 91 Обьект переменной или блок
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

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

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

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

3 Ответ от yshindin 02.03.2018 12:03:46

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 447
  • Поблагодарили: 171

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 Ответ от Fck_This 03.03.2018 09:14:20

  • Ошибка 91 Обьект переменной или блок
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

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

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

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

5 Ответ от yshindin 03.03.2018 09:45:27

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 447
  • Поблагодарили: 171

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 Ответ от Fck_This 05.03.2018 09:18:56

  • Ошибка 91 Обьект переменной или блок
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

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 Ответ от Fck_This 05.03.2018 10:15:28

  • Ошибка 91 Обьект переменной или блок
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

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 Ответ от Fck_This 05.03.2018 10:43:23

  • Ошибка 91 Обьект переменной или блок
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

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

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

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

9 Ответ от yshindin 05.03.2018 11:37:48

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 447
  • Поблагодарили: 171

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 Ответ от Fck_This 05.03.2018 16:33:29

  • Ошибка 91 Обьект переменной или блок
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

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

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Понравилась статья? Поделить с друзьями:
  • Run time error 91 excel object variable or with block variable not set
  • Run the game with admins rights как исправить
  • Run the application with admin rights как исправить wrc 7
  • Run time error 9 vba excel subscript out of range
  • Run time error 9 subscript out of range почему