Ошибка excel runtime error 424

Если вы используете Excel, вы можете столкнуться с ошибкой «Ошибка выполнения 424» с сообщением «Требуется объект».

Это ошибка в VBA (Visual Basic для приложений) и в основном проявляется, когда вы указываете на объект, который либо не существует, либо не находится за пределами текущей области.

Если вы видите ошибку, когда кто-то «обрабатывает» какой-то макрос/автоматизированную функцию в электронных таблицах Excel, вероятная проблема заключается в том, что вы называете объект «вне контекста». Это означает, что вы можете загрузить объект, но его содержимое может быть изменено или изменено. Есть также некоторые другие потенциальные проблемы, которые я объясню в этом руководстве…

причина

Ошибка, которую вы видите, будет иметь следующее сообщение:

Ошибка времени запуска «424»

Требуется объект

Чтобы объяснить, почему он показывает ошибку и что это значит, Microsoft выпустила свой пакет «Visual Basic» в конце 90-х.

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

Из-за этого Microsoft представила «VBA» (Visual Basic для приложений) в своем пакете программного обеспечения Office, а именно в Excel и Word. Это позволило типам разработчиков создавать автоматические функции в электронных таблицах Excel, указывать на «объекты» в самой электронной таблице и так далее.

Каждый раз, когда мы используем Visual Basic, мы вызываем ряд «объектов» в памяти. Эти объекты являются просто переменными, используемыми в ряде дополнительных функций, включая пользовательские функции и так далее. Проблема — и это относится к большинству языков программирования — в том, что если указать на объект, который не вызывается, приложение рухнет.

решение

Если вы хотите исправить проблему, вы должны сначала убедиться, что данные есть в системе, и тогда вы сможете правильно обращаться к ним. Этот урок объяснит, как:

1. Убедитесь, что переменные определены правильно

Основная проблема заключается в том, что вы вызываете метод для несуществующей переменной (объекта). Наиболее распространенная причина этого заключается в том, что вы просто неправильно вводите имя переменной и поэтому не объявляете ее в своем приложении VBA. Возьмем следующий пример:

Подтест ()

Application33.WorksheetFunction.Sum (диапазон (“A1: A100”))

Последняя подписка

Вышеприведенное вызовет ошибку, потому что вы пытаетесь вызвать метод WorksheetFunction для «Application33», указанного в объекте.

К сожалению, объект Application33 не существует в памяти, что не позволяет вашему приложению загрузить его. Чтобы исправить это, вам нужно просмотреть исходный код (почти всегда будут указаны неправильные ссылки) и исправить все имена объектов с ошибками.

2. Если вы используете Excel, убедитесь, что есть диапазоны/селекторы

Одна из наиболее распространенных причин ошибки заключается в том, что вы пытаетесь указать несуществующий объект или значение. Это типичная проблема при использовании одного из объектов VLookup или ActiveX. Если вы столкнулись с этой ошибкой, убедитесь, что код указывает только на существующие объекты:

Частный дополнительный тест ()

Это вызовет ошибку

Application.WorksheetFunction.VLookup(TeamName, Range (“TeamNameLookup”), 3, False).

Стоимость должна быть

Application.WorksheetFunction.VLookup(TeamName, Sheets (“YourSheetName”). Диапазон (“TeamNameLookup”), 3, False)

Последняя подписка

Вышеупомянутое означает, что вы пытаетесь вызвать разные рабочие листы, и их соответствующий «диапазон»/«значение» работает без поиска или объявления рабочих листов. Чтобы исправить это, вам нужно убедиться, что вы вызываете «диапазон» или «значение» для соответствующих объектов.

3. Убедитесь, что у вас есть правильные определения

Наконец, одна из наиболее распространенных причин ошибок заключается в том, что вы неправильно определяете свои переменные.

От неправильного определения переменных как неверных интерпретаций объектов до вызова «Option Explicit» вы можете пытаться указать переменные/объекты, которые не определены только потому, что они определены неправильно.

Например…

Вариант очевиден

Персональный дополнительный тест ()

Здесь вам нужно объявить переменные, прежде чем пытаться указать/заполнить их

Например…

Затемните your_path как строку

Установите your_path = “x/y/z”

Последняя подписка

В приведенном выше примере, если переменная «ваш_путь» не объявлена ​​до ее установки, вы получите ошибку 424 (поскольку объект «ваш_путь» не существует). Отсюда вы также должны убедиться, что вы можете вызывать соответствующие объекты (если вы указываете значение рабочего листа, вы должны убедиться, что рабочий лист существует и может быть загружен).

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

The first code line, Option Explicit means (in simple terms) that all of your variables have to be explicitly declared by Dim statements. They can be any type, including object, integer, string, or even a variant.

This line: Dim envFrmwrkPath As Range is declaring the variable envFrmwrkPath of type Range. This means that you can only set it to a range.

This line: Set envFrmwrkPath = ActiveSheet.Range("D6").Value is attempting to set the Range type variable to a specific Value that is in cell D6. This could be a integer or a string for example (depends on what you have in that cell) but it’s not a range.

I’m assuming you want the value stored in a variable. Try something like this:

Dim MyVariableName As Integer
MyVariableName = ActiveSheet.Range("D6").Value

This assumes you have a number (like 5) in cell D6. Now your variable will have the value.

For simplicity sake of learning, you can remove or comment out the Option Explicit line and VBA will try to determine the type of variables at run time.


Try this to get through this part of your code

Dim envFrmwrkPath As String
Dim ApplicationName As String
Dim TestIterationName As String

 

FeelingThis

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

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

#1

23.09.2016 23:24:49

Доброго времени суток. Столкнулся с такой проблемой, при выполнении выкидывает на выделенной строке с Run-Time Error «424»: Object Required:

Код
Sub Test() 
... 
Dim frmtRange As Range 
Set frmtRange = Range(Cells(1, BiggerColumn), Cells(LR, BiggerColumn + 1)) 
Format (frmtRange) 
End Sub 

Function Format(fRange as Range) 
... 
End Function

В чем может быть проблема? Грешу на третью строку, может неправильно задал объект frmtRange(переменные BiggerColumn и LR в порядке).

Изменено: FeelingThis23.09.2016 23:30:10

 

Sanja

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

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

А что Вы хотите от 4-й строки?

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

 

Sanja

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

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

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

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

 

FeelingThis

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

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

Чтобы в frmtRange записался диапазон данных Cells(1, BiggerColumn), Cells(LR, BiggerColumn + 1)
И затем все это дело отправилось на обработку в функцию

Изменено: FeelingThis23.09.2016 23:30:58

 

Jungl

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

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

#5

23.09.2016 23:31:23

FeelingThis,

Код
arr = Format(frmtRange)
 

vikttur

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

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

FeelingThis, кнопка форматирования кода другая — <…>

Sanja, возможно, строка съехала

 

FeelingThis

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

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

Спасибо за замечание, название функции поменял, но проблема не изчезла

 

Sanja

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

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

Вы присвойте результат работы Вашей функции чему нибудь, как пишет Jungl,
Да и саму UDF не помешало-бы посмотреть

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

 

FeelingThis

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

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

Jungl

,
спасибо большое, это помогло

 

Sanja

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

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

#10

23.09.2016 23:37:47

Цитата
vikttur написал: возможно, строка съехала

в таком случае — от 5-й

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

 

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

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

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

#11

23.09.2016 23:40:26

Цитата
название функции поменял, но проблема не изчезла

проблемы закончатся, когда Вы перестанете программировать

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

 

FeelingThis

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

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

#12

23.09.2016 23:42:15

Цитата
Sanja написал: в таком случае — от 5-й

требовалось передать диапазон в функцию

 

Jungl

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

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

#13

23.09.2016 23:55:42

FeelingThis, смотря что вы хотите получить от функции, это вам виднее.
Ведь можно и обойтись передачей параметров оператору Sub через ByRef

Код
Sub Test()
Dim frmtRange As Range
Set frmtRange = Range(Cells(1, 1), Cells(2, 1))
Frmt frmtRange
End Sub
 
Sub Frmt(ByRef fRange As Range)
arr = fRange
End Sub
 

ZVI

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

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

#14

24.09.2016 02:44:56

Поясню, в чём проблема.
1. Сначала о синтаксисе. Вместо Frmt (frmtRange) должно быть либо Frmt frmtRange либо Call Frmt(frmtRange)
Обратите внимание на то, что VBA вставляет пробел в первом случае между Frmt и  (frmtRange), а в случае с Call пробела нет.
2. Теперь о преобразовании типов. Взятие в скобки переменной (см. первый случай) создает временную (runtime) переменную типа Variant, то есть меняет тип передаваемого в функцию параметра с Range на Variant, что и вызывает ошибку несоответствия типов.
Вот код для подтверждения такого преобразования типов:

Код
Sub Test1()
  Dim frmtRange As Range
  Set frmtRange = Range(Cells(1, 1), Cells(2, 1))
  Debug.Print TypeName(frmtRange), TypeName((frmtRange))
End Sub

Выдаст такое: Range         Variant()

Изменено: ZVI24.09.2016 02:47:17

Lendor

0 / 0 / 0

Регистрация: 13.02.2013

Сообщений: 34

1

25.02.2013, 11:58. Показов 66446. Ответов 9

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

в следующем коде в строке 4 (открытие файла с расширением doc) выскакивает ошибка «run-time error ‘424’ object required»

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
 Dim wdApp As Object
 Dim wdDoc As Object
 Set wdApp = CreateObject("Word.Application")
 Set wdDoc = wdApp.Documents.Open(Replace(ThisWorkbook.FullName, ThisWorkbook.Name, act_1058652.doc))
 wdApp.Selection.WholeStory
 wdApp.Selection.Copy
 Worksheets("Обработка").PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
        False, NoHTMLFormatting:=True
 wdDoc.Close
 wdApp.Quit
Set wdDoc = Nothing
Set wdApp = Nothing

уже все перепробовал для того, чтобы она исчезла, и ставил дополнително к 2010 офису 2003, тк код пишется на 2003, а стоял у меня 2010, и биьлиотеки подключал в Tools-References, и в уровне безопасности макросов разрешил обращение к файлам из VBA, а ошибка так и вылазит (((
какие еще могут быть причины этой ошибки



0



693 / 99 / 10

Регистрация: 25.06.2011

Сообщений: 718

25.02.2013, 12:02

2

Эта проблема может возникнуть при следующих случаях:
Библиотека объектов доступа к данным не используется должным образом. — или —
Объект доступа к данным файлов отсутствуют, повреждены или неправильно зарегистрированы.

Добавлено через 42 секунды

Цитата
Сообщение от Lendor
Посмотреть сообщение

Replace(ThisWorkbook.FullName, ThisWorkbook.Name, act_1058652.doc)

попробуй просто прописать путь к файлу



0



Казанский

15137 / 6411 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

25.02.2013, 12:10

3

Лучший ответ Сообщение было отмечено как решение

Решение

Имя файла — в кавычках!

Visual Basic
1
Set wdDoc = wdApp.Documents.Open(Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "act_1058652.doc"))



4



0 / 0 / 0

Регистрация: 13.02.2013

Сообщений: 34

25.02.2013, 12:23

 [ТС]

4

действительно кавычки)) спасибо



0



Казанский

15137 / 6411 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

25.02.2013, 15:31

5

А лучше так:

Visual Basic
1
Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "act_1058652.doc")

, потому что часть пути может совпадать с именем книги, например c:MyBook.xlsMyBook.xls, и при замене сформируется несуществующий путь.



0



mostApi

7 / 5 / 0

Регистрация: 15.05.2015

Сообщений: 350

02.11.2015, 15:18

6

Та же ошибка!
Обзываю

Visual Basic
1
Public Cmb1, Cmb2 As ComboBox

— есть альтернатива ComboBox?
Почему альтернатива?, или то что можно применить в случае?
Из диапазона ячеек поиском формируется список для ComboBox, потом из него по .ListIndex мне удобно задавать нужные координаты используемых ячеек?!
Ошибка здесь:

Visual Basic
1
2
3
4
5
6
7
8
With Cmb1
    '.Clear
    '.Style = fmStyleDropDownList
        For iRow = 14 To Cells(Rows.Count, 2).End(xlUp).Row Step 4
            .AddItem Cells(iRow, 2)
        Next
    .ListIndex = -1
End With

Добавлено через 46 минут

Visual Basic
1
Dictionary

— может словарь? Как с ним в моем случае быть?



0



Казанский

15137 / 6411 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

02.11.2015, 15:45

7

mostApi, а где Вы связываете Cmb1 с каким-либо существующим комбобоксом? Например

Visual Basic
1
Set Cmb1 = UserForm1.ComboBox1



1



7 / 5 / 0

Регистрация: 15.05.2015

Сообщений: 350

02.11.2015, 16:22

8

Казанский, Ооо, не подумал, спасибо…

Вопрос: собрал словарь, структура такова: Key = «Vasia»; Item = «Вася»… и т.д.
Как найти «Вася» и подставить с него «Vasia»…?



0



Казанский

15137 / 6411 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

02.11.2015, 23:05

9

Цитата
Сообщение от mostApi
Посмотреть сообщение

Как найти «Вася» и подставить с него «Vasia»…?

В смысле, сделать значение равным ключу? Найти — перебором

Visual Basic
1
2
3
4
5
6
  For Each x In di.Keys 'di - словарь
    If di(x) = "Вася" Then
      di(x) = x
      Exit For
    End If
  Next

А почему приходится искать значение? Может, поменять местами значение и ключ?



0



7 / 5 / 0

Регистрация: 15.05.2015

Сообщений: 350

03.11.2015, 11:23

10

Казанский, спасибо…

Просто у меня в таблице Excel имена пользователей на Русском языке, а в базе, таблица имени пользователя на English, поэтому нужна была простая подстановка…



0



Home > VBA > VBA Object Required Error (Error 424)

When VBA is not able to recognize the object for which you are referring to the property or a method it shows you the Object Required error. In simple words, if you refer to an object, but the name of that object is not correct (that object is not in the VBA’s object hierarchy) it shows error 424, like the following.

In the above code, as you can see, I have misspelled the active cell object, and when VBA’s executes that line of code can’t that object because there’s no object with that name (as I have misspelled it).

Note: If you have used the Option Explicit statement in the module then with the same, you’ll get a different error (see image below).

Used “Set” Keyword for a Non-Object Variable

When you use a variable to assign an object to it, you need to use the keyword “Set”. In the following example, you have a myWKS for the worksheet and iVal for the value from cell A1.

As you can see, in the above code you have variables out of which one is declared as a worksheet object and the second as a string. But at the time of assigning the value, we have used the “Set” keyword to the variable “iVal” which is not declared as an object but as a string.

How to Fix Object Required (Error 424) in VBA

  1. Go to the Debug menu in your visual basic editor.
  2. Use the step to run the entire code step by step.
  3. The moment you reach the line where you have an error VBA will show you an error.
  4. Correct that line of code.

The other way could be going through the code line by line by reading it to make sure you are referring to the right objects and using the correct name of the variables and objects.

You can also use the GOTO statement to surpass an error or show a message to the users once an error occurred.

What is VBA

  • VBA ERROR Handling
  • VBA Automation Error (Error 440)
  • VBA Error 400
  • VBA Invalid Procedure Call Or Argument Error (Error 5)
  • VBA Object Doesn’t Support this Property or Method Error (Error 438)
  • VBA Out of Memory Error (Error 7)
  • VBA Overflow Error (Error 6)
  • VBA Runtime Error (Error 1004)
  • VBA Subscript Out of Range Runtime Error (Error 9)
  • VBA Type Mismatch Error (Error 13)

Возможно, вам также будет интересно:

  • Ошибка excel application defined or object defined error 1004
  • Ошибка ex1022 fanuc что делать
  • Ошибка ews на мотоцикле bmw k1200s
  • Ошибка ews на мотоцикле bmw f650gs
  • Ошибка ews на bmw e39

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии