Доброго всем времени суток. Подскажите из-за чего это может быть, и какие части кода надо скинуть, весь файл не могу- политика безопасности суровая штука… |
|
Юрий М Модератор Сообщений: 60763 Контакты см. в профиле |
{quote}{login=}{date=09.07.2012 01:42}{post}какие части кода надо скинуть, весь файл не могу- политика безопасности суровая штука…{/post}{/quote}Меняем на листе с данными патроны на огурцы. и показываем файл. |
mini_adm Пользователь Сообщений: 6 |
Пардон за орфографию и что тема без автора вышла. ps не уверен что дело в коде, мне кажется что где то есть различия в настройках Exсel»ей, так как файл рабочий, но не на всех компах. |
Hugo Пользователь Сообщений: 23371 |
С ListView проблема? |
mini_adm Пользователь Сообщений: 6 |
а для не самых утонченных пользователей можно поконкретней написать как это сделать? |
Hugo Пользователь Сообщений: 23371 |
Все ждут, пока я поработаю, поем, и снова поработаю? |
mini_adm Пользователь Сообщений: 6 |
Сделал все прям по пунктам, ListView добавил, но толку нет, все так же сругивается и выдает ту же ошибку. |
Hugo Пользователь Сообщений: 23371 |
Я думаю, что элемент на форме был, но завязан на библиотеку другой версии — поэтому не работало. |
mini_adm Пользователь Сообщений: 6 |
А где можно глянуть эти библиотеки и обновитьоткатить до необходимых? {quote}{login=The_Prist}{date=09.07.2012 05:12}{thema=}{post}Теперь в свойствах этого самого ListView надо задать имя объекта(Name),…{/post}{/quote}Объект с которым проблема действительно SubsList, это список поставщиков, которыми мы не можем оперировать, возникает ошибка. Не понял только почему их надо менять на ListView1 ? |
Hugo Пользователь Сообщений: 23371 |
В редакторе VBA заходите в Tools->References- там всё. Только понять, кто за что отвечает — в основном по наитию |
mini_adm Пользователь Сообщений: 6 |
Эт я понял, я имею ввиду как узнать где необходимая библиотека, так как общий список активных библиотек сверял с компом на котором эти макросы работают. Все одинаково. |
mini_adm Пользователь Сообщений: 6 |
Хмм…сам не понял что поменял, но теперь макрос сругивается на «Application.Goto Reference:=ArrNames(i)» PS пардон что столько нубо-вопросов, просто общее представление о коде у меня имеется и очень интересно что и как… PPS да, правила создания тем на форуме я читал и пункт «одна тема-один вопрос» помню, но правда очень интересно… |
Hugo Пользователь Сообщений: 23371 |
#13 10.07.2012 19:34:36 Ругается — значит нет такого диапазона. Например «RMASubs7» |
Если вы используете 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
В Вашем варианте по умолчанию 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
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
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"