как убрать "#ДЕЛ/0!" из ячейки?

Программирование на Visual Basic for Applications
starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

как убрать "#ДЕЛ/0!" из ячейки?

Сообщение starkee » 16.01.2008 (Ср) 10:26

Здравствуйте, старшие товарищи!
преклоняюсь перед Вашим авторитетом и заранее извиняюсь за, наверно, простейший вопрос.... и все же...

Дело вот в чем.... Допустим, в ячейке стоит формула "=a/b"....
и например, если b=0, то естественно в ячейке выскакивает "#ДЕЛ/0!".... В таком случае мне необходимо просто стирать формулу в ячейке. Сейчас я делаю проверку на b, т.е. если b=0, то стираю формулу.....

А теперь, внимание(!!!) ВОПРОС:
1)почему при обращении к ячейке с формулой (в которой уже стоит "#ДЕЛ/0!"), он (дебагер) мне говорит, что типа ошибка, извини, не могу понять че ты хочешь от этой ячейки.... ?

2)как проверить, стоит ли "#ДЕЛ/0!" в ячейке с формулой, обращаясь к самой ячейке с формулой, а не проверяя на нули переменные из формулы?

БЛАГОДАРЮ заранее за проявленное сочувствие к моей проблеме...

З.Ы. вопрос, на самом деле, очень важен, т.к. формулы бывают очень сложные, с сылками, и проверять на нули все переменные, стоящие в знаменателе.... ну.... не самое эффективное решение... :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.01.2008 (Ср) 10:37

Зацени ЕОШИБКА().
Lasciate ogni speranza, voi ch'entrate.

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 16.01.2008 (Ср) 11:03

Зацени, alibek :lol:
примечание: Q17 = cells(17,17) - это ячейка с формулой
Код: Выделить всё
Range(Cells(17, 18), Cells(17, 18)).FormulaLocal = "=ТИП.ОШИБКИ(Q17)"
If Cells(17, 18) = 2 Then
Cells(17, 17) = ""
Cells(17, 18) = ""
End If

спасибо, что помог думать в нужном направлении.... хотя, может, ты не то имел в виду..... но и так, как получилось у меня - пойдет 8)

З.Ы. нравится мне этот форум)))

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.01.2008 (Ср) 12:15

Я имел ввиду другое, эту функцию следовало использовать на листе.
Для VBA проще использовать IsError().
Lasciate ogni speranza, voi ch'entrate.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 20.01.2008 (Вс) 3:56

а зачем вообще стирать формулы и даже использовать доп. функции? Достаточно записать формулу в ячейке вот так:

=ЕСЛИ(b;a/b;)
Привет,
KL

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 21.01.2008 (Пн) 14:39

alibek писал(а):Я имел ввиду другое, эту функцию следовало использовать на листе.
Для VBA проще использовать IsError().

оу!!!! ..... alibek!!!!! это гениальная функция!!!!!! это именно то, что мне было нужно..... проблема разрешилась (вариант, описанный мною выше, менее эффективен).... зато столкнулась с другой проблемой....
Вопрос №2:
почему может не срабатывать функция On Error?....
Код: Выделить всё
On Error GoTo 3
'далее такой кусочек текста
Range(Cells(aa, 21), Cells(aa, 21)).FormulaLocal = "=ТИП.ОШИБКИ(S" & aa & ")"
fll = 3
If Cells(aa, 21) = 2 Then
   Cells(aa, 19) = ""
End If
ssyl3:
Cells(aa, 21) = ""
Err.Clear

3:
If Err.Number = 13 Then
   Err.Clear
   If fll = 3 Then GoTo ssyl3
Else
   MsgBox Err.Description & vbCr & "номер ошибки" & Err.Number
   Exit Sub
End If


я уже поняла, что гораздо разумнее в данном случае использовать функцию IsError()..... Однако, пока я не знала об этой функции, я обходила ошибку в Cells(aa,21) именно через On Error ... так вот при ошибки в указанной ячейке он не идет на "он еррор", а выскакивает дебаггер..... собственно интересно узнать у вас, почему может не срабатывать функция "он еррор".....
нужно также учесть, что в течении хода программы она уже срабатывала один раз в аналогичной ситуации....

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 21.01.2008 (Пн) 14:46

KL писал(а):а зачем вообще стирать формулы и даже использовать доп. функции? Достаточно записать формулу в ячейке вот так:

=ЕСЛИ(b;a/b;)

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

СПАСИБО функции IsError()!!!!!!! и alibek!!!! :D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.01.2008 (Пн) 14:47

Управление из обработчика ошибок надо возвращать по Resume, а не GoTo. Но данный код в любом случае кривой и лучше его не использовать.
Lasciate ogni speranza, voi ch'entrate.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 22.01.2008 (Вт) 18:43

Думаю, что alibek намекал на следующее:

Код: Выделить всё
Sub test1()
    Dim aa As Long
    aa = 1
    If IsError(Cells(aa, 1)) Then Cells(aa, 1) = ""
End Sub

Sub test2()
    Dim aa As Long
    aa = 1
    Cells(aa, 1) = IIf(IsError(Cells(aa, 1)), "", Cells(aa, 1).Formula)
End Sub
Привет,
KL

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 23.01.2008 (Ср) 11:35

Слушай!!........... Вот это класс. Это я про фукцию IIf()...... Вообще... Столько нового и полезного узнала от Вас! СПАСИБО!
Прием, описанный KL, в test2 - очень хороший. Я его уже применила у себя и обязательно запомню!

Спасибки еще раз всем! :D


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 46

    TopList