Макрос ошибка 424

 

Доброго всем времени суток.  
Не могу справиться с экселевским файлом с макросами, при попытке задействовать макрос всплявает ошибка «run-time error 424: object required». Интересно что данный файл работает на 2-х других компах, а на менеджерском компе и моем личном ноуте отказывается работать.  
ПРедлагает отладить макрос и выделяет следующие строчки кода» SubsList.ListItems.Clear  
SubsList.ColumnHeaders.Clear»  

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

 

Юрий М

Модератор

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

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

{quote}{login=}{date=09.07.2012 01:42}{post}какие части кода надо скинуть, весь файл не могу- политика безопасности суровая штука…{/post}{/quote}Меняем на листе с данными патроны на огурцы. и показываем файл.

 

mini_adm

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

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

Пардон за орфографию и что тема без автора вышла.  

  ps не уверен что дело в коде, мне кажется что где то есть различия в настройках Exсel»ей, так как файл рабочий, но не на всех компах.

 

Hugo

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

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

С ListView проблема?  
Попробуйте добавить в проект на форму этот элемент, затем удалить на той машине, где не идёт.  
Нужен Microsoft Windows Common Control, файл MSCOMCTL.OCX

 

mini_adm

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

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

а для не самых утонченных пользователей можно поконкретней написать как это сделать?

 

Hugo

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

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

Все ждут, пока я поработаю, поем, и снова поработаю? :)  
Я предполагаю, что может быть на Вашией машине есть этот компонент, но другой версии, поэтому что-то нестыкуется (у меня раз было похожее).  
Открываете редактор ВБА (Alt+F11), кликаете по форме (в своём файле в дереве проектов), смотрите, чтоб был отображён Toolbox (View-Toolbox).  
На нём должен быть ListView — если нет, то кликаете ПКМ и выбираете в списке.  
У меня кстати на машине их два, 5 и 6 версии, и живут кстати в разных файлах.

 

mini_adm

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

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

Сделал все прям по пунктам, ListView добавил, но толку нет, все так же сругивается и выдает ту же ошибку.  
Может с этим ЛистВьюером надо еще чета сделать?

 

Hugo

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

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

Я думаю, что элемент на форме был, но завязан на библиотеку другой версии — поэтому не работало.  
А таким хитрым ходом можно к проекту подключить существующую на машине библиотеку — а там уж как пойдёт…  
Не пошло :(  
Тогда пробуйте заменить полностью тот объект на доступный, как сказал Дмитрий.  
Хотя в 6-ой версии смотрю появились некоторые новые свойства — если они задействованы в коде, то опять будет ругаться. Возможно — не уверен, не проверял.

 

mini_adm

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

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

А где можно глянуть эти библиотеки и обновитьоткатить до необходимых?  

  {quote}{login=The_Prist}{date=09.07.2012 05:12}{thema=}{post}Теперь в свойствах этого самого ListView надо задать имя объекта(Name),…{/post}{/quote}Объект с которым проблема действительно SubsList, это список поставщиков,  которыми мы не можем оперировать, возникает ошибка. Не понял только почему их надо менять на ListView1 ?  
Все же попробовал поменять в коде, но не помогло. или руки не под то заточены…  
Так же пробовал поменять SubsList на ThisList (если не ошибаюсь) это на этом же форуме вычитал, то же не помогло.

 

Hugo

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

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

В редакторе VBA заходите в Tools->References- там всё. Только понять, кто за что отвечает — в основном по наитию :)  
Можно отключить ненужные и подключить нужные (если есть в наличии).

 

mini_adm

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

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

Эт я понял, я имею ввиду как узнать где необходимая библиотека, так как общий список активных библиотек сверял с компом на котором эти макросы работают. Все одинаково.  
А управлять этими библиотеками как то можно? а то я там увидел только список из нескольких сотен доступных (но неактивных) библиотек со всего компа, а хотелось бы с ними что то сделать, типа обновления…

 

mini_adm

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

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

Хмм…сам не понял что поменял, но теперь макрос сругивается на «Application.Goto Reference:=ArrNames(i)»    
Еще не очень понятна ситуация с переменной «j» очень интересно, почему при последовательном присвоении значений от 1 до 4 во время операций с этой переменной, значение «i» умножается на столь безсвязные цифры (17,41,36,39)…  
И почему в начале задается значение «j» от 1 до 14, а оперируются только значения от 1 до 4-х …  

  PS пардон что столько нубо-вопросов, просто общее представление о коде у меня имеется и очень интересно что и как…  

  PPS да, правила создания тем на форуме я читал и пункт «одна тема-один вопрос» помню, но правда очень интересно…

 

Hugo

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

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

#13

10.07.2012 19:34:36

Ругается — значит нет такого диапазона. Например «RMASubs7»  
«оперируются только значения от 1 до 4-х» — ошибаетесь.  
Остальные тоже обрабатываются, позже.

Если вы используете 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 (поскольку объект «ваш_путь» не существует). Отсюда вы также должны убедиться, что вы можете вызывать соответствующие объекты (если вы указываете значение рабочего листа, вы должны убедиться, что рабочий лист существует и может быть загружен).

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

Всем привет.
Нужно написать макрос на VBA проверки значений, но, увы, я совсем не понимаю сути этого языка. Я много пишу на Питоне, ЯваСкрипте и немного на Яве и С++.
Я много видел ситуаций, но ошибки ВБА просто ставят в ступор… :)
Собственно код

Private Sub Worksheet_Change(ByVal Target As Range)

    BasicRequirements (ActiveCell)

End Sub

Sub BasicRequirements(currentCell)

    If Cells(currentCell.row, currentCell.Column - 1).Value = "Александр" Then
        Debug.Print "Yes"
    Else
        Debug.Print "No"
    End If


End Sub

При выполнении получаю ошибку с требованием какого-то объекта… Какого? Где он должен быть?

задан 22 апр 2017 в 8:29

Skotinin's user avatar

В Вашем варианте по умолчанию ActiveCell = ActiveCell.Value. Вы передаете в процедуру значение ячейки

Меняем:

Private Sub Worksheet_Change(ByVal Target As Range)
    BasicRequirements (ActiveCell.Offset(, -1).Value)
End Sub

Sub BasicRequirements(s As String)
    If s = "Саня" Then
        Debug.Print "Yes"
    Else
        Debug.Print "No"
    End If
End Sub

Если передать ячейку как объект:

Private Sub Worksheet_Change(ByVal Target As Range)
    BasicRequirements ActiveCell
End Sub

Sub BasicRequirements(r As Range)
    If r.Column = 1 Then Exit Sub

    If r.Offset(, -1).Value = "Саня" Then
        '.....'
    End If
End Sub

Не стесняйтесь ставить в начале модуля Option Explicit и объявлять переменные. Помогает избегать многих ошибок.

ответ дан 22 апр 2017 в 8:59

vikttur_Stop_RU_war_in_UA's user avatar

1

Скорее всего проблема с вызовом Cells(currentCell.row, currentCell.Column - 1) в случае, когда currentCell.Column равен 0.

Попробуйте добавить проверку на граничные значения.

Upd.

На самом деле главная проблема с неправильным вызовом. Должно быть так:

Private Sub Worksheet_Change(ByVal Target As Range)
    BasicRequirements ActiveCell
End Sub

Sub BasicRequirements(currentCell)
    If Cells(currentCell.Row, currentCell.Column - 1).Value = "Александр" Then
        Debug.Print "Yes"
    Else
        Debug.Print "No"
    End If
End Sub

Проверка на то, что currentCell.Column больше нуля тоже нужна.

ответ дан 22 апр 2017 в 8:36

Uladzimir Palekh's user avatar

4

You have a couple options when dealing with properties. .Value is a property, but you are using the Set command, which is reserved for objects.

You can set the object to a variable, such as:

Dim oBookTitle As Object
Set oBookTitle = wb.getElementById("booktitle")
oBookTitle.Value = book

getElementByID() returns an object — .Value returns or sets the value of the object (it’s a property).

Or you can simply use the property directly:

wb.getElementById("booktitle").Value = book   

«Yes I changed it to try set earlier in the day when I originally had what you posted, it does not work with or without set.» – bella98789

I don’t see a «Value» in the HTML code. You can try .innerText or .outerText instead of .Value and see if that resolves your issue.

Also, if you are not waiting for your webpage to load completely, then your object won’t be available. Add this line for debugging purposes:

If wb.getElementById("booktitle") Is Nothing Then MsgBox "Obj not set"

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Майнкрафт ошибка неполный набор тегов
  • Майнкрафт при загрузке файлов произошла ошибка неустойчивое соединение
  • Макрос ошибка 400
  • Майнкрафт ошибки генерации миров

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

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