Vba excel элемент не найден

I’m looking for user ID #s from a list. However some users no longer exist. I’ve tried the test method, the on error go to method, and if err.number<> 0 then method. I still receive the Run-time error '91': object variable or with block variable not set. The number does not exist on the the list. Below is my code with a couple of fruitless attempts

On Error GoTo errorLn

If Err.Number <> 0 Then
 GoTo errorLn
End If
Cells.Find(What:=uSSO, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Select

What other options are there? Or am I misplacing the lines of «error»? I have tried it before and after the «cells.Find…»

Community's user avatar

asked Aug 15, 2012 at 16:03

orangehairbandit's user avatar

You will want to do something different than have message boxes, presumably.

Dim myCell As Range

Set myCell = Cells.Find(What:=uSSO, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)

If (Not myCell Is Nothing) Then
    MsgBox "something!"

Else
    MsgBox "nothing"
End If

answered Aug 15, 2012 at 16:12

enderland's user avatar

enderlandenderland

13.7k17 gold badges100 silver badges152 bronze badges

I believe you’ll need to restructure it just a little bit. It is not the best practice to handle errors with On Error Resume Next, but you could try this:

On Error Resume Next
Cells.Find(What:=uSSO, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Select

If Err.Number <> 0 Then
 '''Do your error stuff'''
 GoTo errorLn
Else
    Err.Clear
End If

Does that work for your situation?

Source: http://www.mrexcel.com/forum/excel-questions/143988-check-if-value-exists-visual-basic-applications-array.html

answered Aug 15, 2012 at 16:08

RocketDonkey's user avatar

2

Try this

Sub Sample1()
    Dim oSht As Worksheet
    Dim uSSO As String
    Dim aCell As Range
    
    On Error GoTo Whoa
    
    '~~> Change this to the relevant sheet
    Set oSht = Sheets("Sheet1")
    
    '~~> Set User ID here
    uSSO = "User ID"
    
    Set aCell = oSht.Cells.Find(What:=uSSO, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
    
    '~~> Check if found or not
    If Not aCell Is Nothing Then
        MsgBox "Value Found in Cell " & aCell.Address
    Else
        MsgBox "Value Not found"
    End If
    
    Exit Sub
Whoa:
    MsgBox Err.Description
End Sub

I also would recommend reading this link where I have covered .Find and .FindNext

Topic: .Find and .FindNext In Excel VBA

Link: https://web.archive.org/web/20160316214709/https://siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/

Kolappan N's user avatar

Kolappan N

3,5012 gold badges35 silver badges41 bronze badges

answered Aug 15, 2012 at 16:09

Siddharth Rout's user avatar

Siddharth RoutSiddharth Rout

146k17 gold badges206 silver badges250 bronze badges

1

3 Возврат без GoSub 5 Недопустимый вызов процедуры 6 Переполнение 7 Недостаточно памяти 9 Список индексов вне диапазона 10 Этот массив имеет фиксированную длину или временно заблокирован 11 Деление на нуль 13 Несовпадение типов 14 Недостаточно места для строки 16 Выражение слишком сложное 17 Не удалось выполнить запрошенную операцию 18 Прерывание со стороны пользователя 20 Выполнение возобновлено без ошибок 28 Недостаточно места для стека 35 Подпрограмма, функция или свойство не определены 47 Превышено допустимое число ресурсов кода или приложений-клиентов DLL 48 Ошибка при загрузке ресурса кода или DLL 49 Неверное соглашение о вызовах для ресурса кода или DLL 51 Внутренняя ошибка 52 Неверное имя файла или номер файла 53 Файл не найден 54 Неверный режим файла 55 Файл уже открыт 57 Ошибка ввода/вывода при работе с устройством 58 Файл уже существует 59 Неверная длина записи 61 Диск заполнен 62 Ввод за концом файла 63 Неверный номер записи 67 Недопустимо большое число файлов 68 Устройство недоступно 70 В разрешении отказано 71 Диск не готов 74 Невозможно переименовать с указанием другого диска 75 Ошибка доступа к пути/файлу 76 Путь не найден 91 Не задана переменная объекта или переменная блока With 92 Не инициализирован цикл For 93 Недопустимый шаблон строки 94 Недопустимое использование неопределенного значения 97 Не удается вызвать процедуру Friend для объекта, который не является экземпляром определяющего класса 98 В вызове свойства или метода частный объект не может быть указан ни как аргумент, ни как возвращаемое значение 298 Не удалось загрузить системный ресурс или библиотеку DLL 320 Нельзя использовать буквы дисков в указанных именах файлов 321 Недопустимый формат файла 322 Невозможно создать требуемый временный файл 325 Недопустимый формат в файле ресурсов 327 Именованное значение данных не найдено 328 Недействительный параметр; не удается выполнить запись в массивы 335 Не удалось получить доступ к реестру системы 336 Неправильно зарегистрирован компонент 337 Компонент не найден 338 Компонент запущен неправильно 360 Объект уже загружен 361 Не удается загрузить или выгрузить этот объект 363 Указанный элемент управления не найден 364 Объект был выгружен 365 Не удается выгрузить в рамках этого контекста 368 Указанный файл устарел. Этой программе требуется более новая версия 371 Указанный объект нельзя использовать в качестве формы владельца для Show 380 Недопустимое значение свойства 381 Недопустимый индекс массива свойств 382 Свойство Set нельзя запустить во время выполнения 383 Свойство Set нельзя использовать со свойством, доступным только для чтения 385 Требуется индекс массива свойства 387 Свойство Set не разрешено 393 Свойство Get нельзя запустить во время выполнения 394 Свойство Get нельзя выполнять для свойства, доступного только для записи 400 Форма уже отображается, нельзя отобразить в модальном режиме 402 Код сначала должен закрыть самую верхнюю модальную форму 419 В разрешении на использование объекта отказано 422 Свойство не найдено 423 Метод или свойство не найдено 424 Требуется объект 425 Недопустимое использование объекта 429 Компонент не может создать объект или возвратить ссылку на этот объект 430 Класс не поддерживает автоматизацию 432 Операция автоопределения не нашла имя файла или класса 438 Объект не поддерживает это свойство или метод 440 Ошибка операции автоопределения 442 Соединение с библиотекой типов или библиотекой объектов для вынесенного процесса потеряно 443 Объект автоопределения не имеет значения по умолчанию 445 Объект не поддерживает это действие 446 Объект не поддерживает именованных аргументов 447 Объект не поддерживает текущего значения языковых стандартов 448 Именованный аргумент не найден 449 Аргумент является обязательным, или неверно присвоенное значение свойства 450 Неверное число аргументов или неверно присвоенное значение свойства 451 Объект не является семейством 452 Недопустимый порядковый номер 453 Указанный ресурс кода не найден 454 Ресурс кода не найден 455 Ошибка блокировки ресурса кода 457 Этот ключ уже назначен элементу данной коллекции 458 Переменная использует тип, не поддерживаемый в Visual Basic 459 Этот компонент не поддерживает набор событий 460 Недопустимый формат буфера обмена 461 Метод или элемент данных не найден 462 Удаленный сервер не существует или недоступен 463 Класс не зарегистрирован на локальном компьютере 480 Не удается создать изображение AutoRedraw 481 Недопустимый рисунок 482 Ошибка принтера 483 Драйвер принтера не поддерживает указанное свойство 484 Проблема при получении сведений о принтере из системы. Убедитесь в правильной настройке принтера 485 Недопустимый тип рисунка 486 Не удается распечатать изображение формы на этом типе принтера 520 Не удается очистить буфер обмена 521 Не удается открыть буфер обмена 735 Невозможно сохранить файл в каталог TEMP 744 Искомый текст не найден 746 Недопустимая длина замены 31001 Недостаточно памяти 31004 Нет объекта 31018 Класс не задан 31027 Не удается активировать объект 31032 Не удается создать внедренный объект 31036 Ошибка при сохранении в файл 31037 Ошибка при загрузке из файла
 

Сбитый Лётчик Небосводов

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

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

#1

06.03.2022 07:19:06

Здравствуйте, коллеги!
Ошибка «Компонент с указанным именем не найден.» при обращении к диаграмме

Код
Лист.ChartObjects("Chart " & Лист.ChartObjects.Count).Select

При этом:
1, Никаких нареканий на Лист.ChartObjects(«Chart » & Лист.ChartObjects.Count) в другом макросе нет.
2. Обход известен

Код
Лист.ChartObjects(Лист.ChartObjects.Count).Select

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

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

  • Копирование03052328.xlsb (37.07 КБ)

 

Дмитрий(The_Prist) Щербаков

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

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

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

#2

06.03.2022 09:02:09

Цитата
написал:
Но хочется понять, в чём дело,

Так Вы посмотрите на имя диаграммы и сравните с их кол-вом — это не всегда одинаковые значения. У Вас диаграмма уже не пойми сколько раз на листе создавалась и поэтому у неё имя: Chart 27. А Вы пытаетесь обратиться этим кодом:

Код
"Chart " & Лист.ChartObjects.Count

к Chart 1

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

 

VBA -это чрезвычайно черствая, бездушная и циничная штукенция, которая выполняя каждую строку вашего кода — делает не то, для чего это строка была сгенерирована путем напряженной мыслительной деятельности, а то, что в этой строке написано!
т.е. нужно перестать восхищаться логичностью написанного кода, цокать языком, рассматривая результаты своей работы, и задать себе неприятный, но очень правильный вопрос: «а что я здесь нахомутал?», найденный ответ на этот вопрос и будет решением (иногда временным, до выяснения следующего предательского куска кода)
я, обычно, шаг с недоумением переходящим в желание пнуть эту штуковину сразу пропускаю и перехожу к планомерному поиску и устранению допущенной досадной ошибки)
Debug вам в помощь!

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

 

Сбитый Лётчик Небосводов

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

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

#4

06.03.2022 13:23:51

Цитата
Дмитрий(The_Prist) Щербаков написал:
посмотрите на имя диаграммы

Спасибо.
Думал, что после Лист.ChartObjects.Delete и, соответственно, Лист.ChartObjects.Count = 0 и Лист.ChartObjects.Name для первой диаграммы становится Chart 1, а тут вона оно как.

Цитата
Ігор Гончаренко написал:
VBA -это

Зачем Вы это написали?
Понимаю, что ради показа блистательного ума не жаль потраченного времени, но по-возможности прошу думать и о времени читающих.

 

я это написал для вас (и не только)
считайте это методология исправления не работающего кода (если у вас есть своя проверенная и более эффективная, тогда все это вам читать не нужно)
в ситуации когда написал архилогичный и безупречный код (в другом же файле эта конструкция работает), но он не работает как предполагалось…
нужно сосредоточиться не на размышлениях что не так с VBA, EXcel, Windows, с компьютером или с расположением звезд
нужно сосредоточится на мысли «где дырка в моем коде» (в моей логике). усилия потраченные в этом направлении приведут к результату

Изменено: Ігор Гончаренко06.03.2022 15:00:53

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

 

_Igor_61

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

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

Сбитый Лётчик Небосводов

, для начала изучите и поймите, что Count и Name — разные вещи, прежде чем предъявлять претензии к тем, кто Вам пытается помочь. Это о времени читающих (Ваше #4)

 

Сбитый Лётчик Небосводов

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

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

#7

06.03.2022 17:42:07

Цитата
_Igor_61 написал:
для начала изучите и поймите

1. Чтобы что-то «изучить», а после «понять», нужно знать, что изучать. Об этом я и спрашивал, и это мне уже объяснили. Без Вас.
Для этого, по-моему, и служит форум,
2. Касаемо Ваших и

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

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

 

_Igor_61

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

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

#8

06.03.2022 18:07:05

Цитата
Сбитый Лётчик Небосводов написал:
не говорите, что мне делать,. и я не скажу, куда вам пойти

Спасибо! :)

Цитата
Сбитый Лётчик Небосводов написал:
При удалении листа-цели

Лист и диаграмма — тоже разные вещи (объекты). Потому и советы (но не «поучения»). Учитесь летать, «летчик», чтобы какое-то незнание чего-то Вам не помешало при очередном взлете! :)

 

Сбитый Лётчик Небосводов

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

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

#9

06.03.2022 18:23:48

Цитата
_Igor_61 написал:
Учитесь летать

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

Изменено: Сбитый Лётчик Небосводов06.03.2022 18:24:16

 

_Igor_61

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

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

Простите, не видел

предыдущую тему

:)

 

Юрий М

Модератор

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

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

Сбитый Лётчик Небосводов,  никто Вас не поучает. Успокойтесь.

 

Сбитый Лётчик Небосводов

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

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

#12

06.03.2022 18:52:10

Цитата
Юрий М написал:
никто Вас не поучает. Успокойтесь.

Привести цитаты и доказать наличие поучений?
А я спокоен. Наверное, успокоиться нужно Вам, коли Вы на не касающееся Вас возбудились.

 

Юрий М

Модератор

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

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

#13

06.03.2022 19:21:54

Цитата
Сбитый Лётчик Небосводов написал:
успокоиться нужно Вам, коли Вы на не касающееся Вас возбудились.

Меня, как модератора, на форуме касается всё. Тема закрыта: решение Вам не нужно — зашли поскандалить.

объект не найден. ActiveWorkbook

lopuxi

Дата: Пятница, 23.12.2016, 12:04 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 142


Репутация:

0

±

Замечаний:
0% ±


Excel 2007, 2013

Что я хочу сделать. Я хочу открыть книгу Excel, что бы собрать от туда данные.
Книгу что я хочу открывать макросом, все листы имеют имена — «Name». Имя листа к которому мне нужно обратиться Result имя указанное на листе («Результат»), но его пользователь может изменить. И тогда макрос потеряет путь к нему. По этому мне нужно обратиться именно Rusult

Однако формулировка строки ниже — не работает. Макрос не может найти путь к объекту, но почему?
ActiveWorkbook.Rusult.cells(….) = ошибка 438 Объект не поддерживает это свойство или объект

Код начинается вот так:

[vba]

Код

FilesToOpen = Application.GetOpenFilename _
        (FileFilter:=»Книга Excel (*.xls*), *.xls*», MultiSelect:=False, Title:=»Выберите Excel файл, выбора канала»)

    If VarType(FilesToOpen) = vbBoolean Then
        ‘была нажата кнопка отмены — выход из процедуры
        Exit Sub
    End If

Set wb_1 = ActiveWorkbook ‘ Основная книга
Set wb_2 = Workbooks.Open(FilesToOpen) ‘ Вторая книга

Namebook1 = wb_1.Name ‘ имя основной книги.
Namebook2 = wb_2.Name ‘ Имя книги с афинити.

MsgBox wb_2.Worksheets(1).Cells(2, 1).Value                      ‘ — Так работает
MsgBox wb_2.Worksheets(«Результат»).Cells(2, 1).Value        ‘ — Так работает
MsgBox wb_2.Result.Cells(2, 1).Value                    ‘ — А так не работает :(((

[/vba]

К сообщению приложен файл:

1877177.xlsm
(19.0 Kb)


О_о …и так можно было?

Сообщение отредактировал lopuxiПятница, 23.12.2016, 12:46

 

Ответить

K-SerJC

Дата: Пятница, 23.12.2016, 12:16 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

Замечаний:
0% ±


Excel 2013

пример бы…


Благими намерениями выстелена дорога в АД.

 

Ответить

Manyasha

Дата: Пятница, 23.12.2016, 12:24 |
Сообщение № 3

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

lopuxi, попробуйте так
[vba]

Код

Sub test1()
    Dim sh As Worksheet
    FilesToOpen = «D:Маринаtestфайл.xlsx»
    Set wb_2 = Workbooks.Open(FilesToOpen) ‘ Вторая книга
    wb_2.VBProject.VBComponents(«result»).Activate
    Set sh = wb_2.ActiveSheet
    MsgBox sh.Name
End Sub

[/vba]
или так
[vba]

Код

Sub test2()
    Dim sh As Worksheet, wsh
    FilesToOpen = «D:Маринаtestфайл.xlsx»
    Set wb_2 = Workbooks.Open(FilesToOpen) ‘ Вторая книга
    For Each wsh In wb_2.Sheets
        If wsh.CodeName = «result» Then
            Set sh = wsh
            Exit For
        End If
    Next wsh
    MsgBox sh.Name
End Sub

[/vba]

Для первого способа должен быть разрешен доступ к объектной модели VBA.


ЯД: 410013299366744 WM: R193491431804

 

Ответить

lopuxi

Дата: Пятница, 23.12.2016, 12:46 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 142


Репутация:

0

±

Замечаний:
0% ±


Excel 2007, 2013


О_о …и так можно было?

 

Ответить

K-SerJC

Дата: Пятница, 23.12.2016, 13:05 |
Сообщение № 5

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

Замечаний:
0% ±


Excel 2013

[vba]

Код

wb_2.VBProject.VBComponents.Item(«result»).Activate
nn = ActiveSheet.Name
MsgBox wb_2.Sheets(nn).Cells(2, 1).Value

[/vba]

в вашем коде последнюю строку замените

но второй вариант Manyasha, правильнее будет


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJCПятница, 23.12.2016, 13:11

 

Ответить

lopuxi

Дата: Пятница, 23.12.2016, 13:49 |
Сообщение № 6

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 142


Репутация:

0

±

Замечаний:
0% ±


Excel 2007, 2013

Да, Спасибо! Способы выше помогли решить проблему!)


О_о …и так можно было?

Сообщение отредактировал lopuxiПятница, 23.12.2016, 13:50

 

Ответить

Alex_ST

Дата: Пятница, 23.12.2016, 14:23 |
Сообщение № 7

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Файлы с макросами с работы открывать не могу … :'(
Может быть в коде из первого поста поэтому что-то и проглядел. Но вообще-то не понял, с какого перепугу к листу открытой книги wb_2 нельзя обращаться по её CodeName Result ?
Я как раз так обычно и защищаю код от ошибок в результате переименования листов «шибко дюже грамотными» юзерами: назначаю листам CodeName и обращаюсь по ним.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Manyasha

Дата: Пятница, 23.12.2016, 15:24 |
Сообщение № 8

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Алексей, здравствуйте. Вот здесь я давала объяснения.

Добавлю еще, что, если имя vba-проекта нужной книги уникально, то можно еще через него обратиться:
[vba]

Код

Application.VBE.VBProjects(«VBAProjectWB2»).VBComponents(«result»).Activate

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Alex_ST

Дата: Пятница, 23.12.2016, 15:35 |
Сообщение № 9

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Спасибо, Маша.
Век живи, век учись…
Мне из книги в книгу обращаться приходится очень редко. Поэтому на эти грабли умудрился пока ни разу не наступить.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Alex_ST

Дата: Пятница, 23.12.2016, 15:43 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Хотя, конечно, странно, т.к. по умолчанию доступ к объектной модели проекта VBA, кажется, закрыт…
А для раннего связывания (хоть я его обычно и не использую) надо ручками в референсах подключить библиотеку Microsoft Visual Basic for Applications Extensibility 5.3



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

возникли проблемы с добавлением кнопки s в форму пользователя. По сути, я хочу, чтобы кнопка вставляла данные в новую строку на sheet1 с полями, установленными, как показано ниже. Однако при тестировании кнопки появляется сообщение об ошибке «Метод или элемент данных не найден».

Не очень хорошо с VBA, пробовал читать онлайн, но я все еще не понимаю, что делать. Пожалуйста помоги.

Private Sub CommandButton1_Click()

Dim LastRow As Long, ws As Worksheet

Set ws = Sheets("Sheet1")

LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1

ws.Range("A" & LastRow).Value = ComboBox1.Text
ws.Range("C" & LastRow).Value = TextBox1.Text
ws.Range("D" & LastRow).Value = ComboBox2.Text
ws.Range("F" & LastRow).Value = CheckBox2.Text
ws.Range("E" & LastRow).Value = CheckBox1.Text
ws.Range("H" & LastRow).Value = ListBox1.Text
ws.Range("G" & LastRow).Value = ListBox2.Text
ws.Range("I" & LastRow).Value = TextBox2.Text

End Sub

Флажки не имеют свойства Text . Вместо этого используйте свойство Value , например:

ws.Range("F" & LastRow).Value = CheckBox2.Value

Обратите внимание, что это возвращает либо «True», либо «False». Если вам требуется что-то еще, вам нужно сделать проверку, например:

ws.Range("F" & LastRow).Value = IIf(CheckBox2.Value,"Yes","No")

0 / 0 / 0

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

Сообщений: 37

1

Как вывести сообщение, если необходимый файл не найден?

22.11.2016, 08:48. Показов 3398. Ответов 1


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

имеется переменная filename, значение которой формируется в зависимости от выбранных значений на форме, после чего файл открывается, с него копируется информация, filename закрывается.
как вывести сообщение что filename не найден, при этом чтоб выполнение процедуры не приводило к ошибки VBA



0



snipe

4038 / 1423 / 394

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

Сообщений: 3,541

22.11.2016, 09:16

2

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

Решение

если функция dir(«полный путь») вернет пустую строку то файла нет

Visual Basic
1
if dir("c:windowswin.ini")="" then msgbox "Файл не найден"



1



Я пытаюсь отобразить сообщение об ошибке с недопустимым номером, если элемент не найден с одного листа на другой.

Sub info()

Dim dehyp As Long
Dim rng As Range
Dim wrong As String
wrong = "False"

dehyp = Replace(Range("A5").Value, "-", "")
Sheets("Gov").Select

Set rng = Sheets("Gov").Columns(1).Find(What:=dehyp, LookIn:=xlFormulas, 
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
On Error Resume Next
Set wrong = "True"

If wrong = "True" Then
Sheets("Total usage").Select
MsgBox ("Invalid Number")

Else
rng.Offset(0, 1).Select
Selection.Copy
Sheets("Total usage").Select
Range("B5").Select
ActiveSheet.Paste
'this part works without the else and the error stuff



End If



End Sub

Я определил размеры переменных и установил неправильную исходную переменную как false. Я получаю сообщение об ошибке компиляции, в котором говорится, что требуется объект. Итак, мой вопрос: почему это происходит и что я могу сделать, чтобы исправить ошибку?

1 ответ

Лучший ответ

Учитывая все комментарии, я думаю, вы можете быть после этого кода:

Option Explicit

Sub info()

    Dim dehyp As Long
    Dim rng As Range

    dehyp = Replace(Range("A5").Value, "-", "")
    Set rng = Sheets("Gov").Columns(1).Find(What:=dehyp, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

    If rng Is Nothing Then
        MsgBox ("Invalid Number")
    Else
        rng.Offset(0, 1).Copy Destination:=Sheets("Total usage").Range("B5")
    End If

End Sub


3

DisplayName
21 Окт 2019 в 23:46

Like this post? Please share to your friends:
  • Vba excel элемент множество
  • Vba excel экспорт в csv
  • Vba excel шрифт текста в ячейке
  • Vba excel шифрование текста
  • Vba excel что такое boolean