Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 12:05   #1
glumz
Пользователь
 
Регистрация: 18.01.2013
Сообщений: 12
По умолчанию Функции работы с ошибками в WorksheetFunction

Добрый день.
В макросе не работает функция ISERROR. Выдает в ячейке ошибку ЗНАЧ
WorksheetFunction.IfError(Worksheet Function.VLookup(a.Columns(x).Value , a2, 2, 0), 0)
glumz вне форума Ответить с цитированием
Старый 11.03.2013, 12:10   #2
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

a2 в кавычки разве не надо заключать?
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 11.03.2013, 12:20   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

glumz, выложите весь макрос, а лучше файл XLS.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 11.03.2013, 12:37   #4
glumz
Пользователь
 
Регистрация: 18.01.2013
Сообщений: 12
Печаль

Файл тяжелый (16 Мбт) и содержит инфо с коммерческой информацией, поэтому не выкладываю. Когда ставишь значение в VLOOKUP, которое есть в таблице для проверки (второй аргумент), то все нормально. В ином случае выдает ошибку, хотя конструкция в самой таблице ЕСЛИОШИБКА(ВПР.....)) работает нормально. Даже написав простой код типа Range("a1").Value=IFERROR(1/0,0) выдается ошибка.
Dim a1 As Variant, a2 As Variant, a3 As Variant

' a1 - номера материала в виде строки, тип Range
' а2 - таблица с подмножеством а1, где отражены номера тип Range
' a3 - количество материала. а1 и а3 имеют одинаковую размерность тип Range

Function countAML(a1, a2, a3)

Dim a As Range, q1 As Long, q2 As Long, q3 As Long, w As String, x As Long, y As Long, e As Double

Set a = a1
q1 = a.Columns.Count
q2 = a.Column
q3 = a.Row
'w = Application.ThisCell.Row

y = 0
For x = 0 To q1

If WorksheetFunction.IfError(Worksheet Function.VLookup(a.Columns(q2).Valu e, a2, 2, 0), 0) > 0 And a3.Columns(x) > 0 Then y = y + 1


Next x

countAML = y

End Function

Последний раз редактировалось glumz; 11.03.2013 в 13:52. Причина: полный макрос в файле и исправление ошибок
glumz вне форума Ответить с цитированием
Старый 11.03.2013, 14:32   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

WorksheetFunction.VLookup замените на Application.VLookup.
Разница в том, что если функция не находит искомого значения, в первом случае возникает ошибка VBA (которую надо обрабатывать с помощью On Error ...), а во втором случае функция возвращает значение типа Variant/Error, которое обрабатывается функцией IfError (ее тоже можно вызывать как Application.Iferror).
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 11.03.2013, 14:35   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Даже написав простой код типа Range("a1").Value=IFERROR(1/0,0)
А вы, например, так попробуйте:
[A1] = [IfError(1/0,0)]

Цитата:
Код:
If WorksheetFunction.IfError(Worksheet Function.VLookup(a.Columns(q2).Valu e, a2, 2, 0), 0) > 0 And a3.Columns(x) > 0 Then y = y + 1
А если так:

Код:
If Not IsError(Worksheet Function.VLookup(a.Cells(1,1), a2 , 2, 0)) and a3.Columns(x) > 0 Then y = y + 1
но сердце-вещун подсказывает, что в данной функции вполне можно избавиться от цикла. например так:


Код:
If Not IsError(Application.VLookup(a.Cells(1,1), a2 , 2, 0)) then
  Y = Y + Worksheet Function.CountIf(a3 , ">0")
End If
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 11.03.2013 в 15:11.
DiemonStar вне форума Ответить с цитированием
Старый 11.03.2013, 15:46   #7
glumz
Пользователь
 
Регистрация: 18.01.2013
Сообщений: 12
По умолчанию

Спасибо, заработало! (Про разницу в вызове встроенных функций инфо нигде не встречал, буду знать)
glumz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в функции WorksheetFunction ольгаг Microsoft Office Excel 8 20.09.2012 12:50
WorksheetFunction.AveDev Alla_s Microsoft Office Excel 1 25.05.2012 20:15
Программа на СИ++, используя функции работы с файлами и функции <string.h> Аня Popova Фриланс 9 13.09.2010 15:52
Ошибка при использовании WorksheetFunction.VLookup imagenable@mail.ru Microsoft Office Excel 2 26.02.2010 12:04
Проблема Application.WorksheetFunction.Match nemoomen Microsoft Office Excel 1 01.04.2009 03:12