Как из выполнения функции узнать адрес ячейки

Программирование на Visual Basic for Applications
Павел_В
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 09.07.2005 (Сб) 9:52

Как из выполнения функции узнать адрес ячейки

Сообщение Павел_В » 22.09.2005 (Чт) 9:47

Написал собственную функцию:

Function FUNC (Значение As Variant, Ячейка1 As Variant) As Variant

If Not IsDate(Ячейка1) Then
Error (2)
End If

FUNC = Значение
End Function


Вот мне необходимо при возникновении этой ошибки Error (2) закрасить эту ячейку в красный цвет, помогите плиз......

Maks the best
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 09.06.2005 (Чт) 12:34
Откуда: Санкт-Петербург

Сообщение Maks the best » 22.09.2005 (Чт) 10:17

не так ?:


Код: Выделить всё
Cells(1,1).Interior.ColorIndex = 3

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 22.09.2005 (Чт) 10:27

или так
Код: Выделить всё

s = ActiveCell.Address
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Maks the best
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 09.06.2005 (Чт) 12:34
Откуда: Санкт-Петербург

Сообщение Maks the best » 22.09.2005 (Чт) 10:47

можно ещё красками разноцветными раскрасить ... :shock:

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 22.09.2005 (Чт) 11:01

если № ошибки 2, то так:
Код: Выделить всё

on error goto 10
'твой код


10 if err.number=2 then selection.interior.colorIndex = 3
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Maks the best
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 09.06.2005 (Чт) 12:34
Откуда: Санкт-Петербург

Сообщение Maks the best » 22.09.2005 (Чт) 11:04

понял да?, понял! ...
кто на нас с lord0n а

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 22.09.2005 (Чт) 11:44

Maks the best писал(а):понял да?, понял! ...
кто на нас с lord0n а


да чета сначала не доконца до читал :roll: :lol:
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Павел_В
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 09.07.2005 (Сб) 9:52

Сообщение Павел_В » 22.09.2005 (Чт) 12:56

Подумайте, прежде чем отвечать.
К примеру Вы изменяете значение ( Ячейка1 As Variant) тогда функция вам выдаст ошибку и при этом активной будет ячейка - Ячейка1(так как вы изменяли ее), а мне нужно изменить цвет ячейки(еек) в котрой присутствует эта формула, вот ......

Павел_В
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 09.07.2005 (Сб) 9:52

Сообщение Павел_В » 22.09.2005 (Чт) 13:00

т.е. изменить цвет тех ячеек в котрой присутствует эта формула и в качесвте 2-ого параметра указана (Ячейка1)

Сейчас все эти ячейки простопринимают значения ошибки (#ЗНАЧ) но мне их нужно еще закрашивать......

Причем стандартным обработчиком события
Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
мне не нужно .......

Maks the best
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 09.06.2005 (Чт) 12:34
Откуда: Санкт-Петербург

Сообщение Maks the best » 22.09.2005 (Чт) 13:01

а условное форматирование не помогает ?

Павел_В
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 09.07.2005 (Сб) 9:52

Сообщение Павел_В » 22.09.2005 (Чт) 13:05

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

Павел_В
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 09.07.2005 (Сб) 9:52

Сообщение Павел_В » 22.09.2005 (Чт) 13:10

Хотя пардон, при условном форматировании я могу указать всем ячейка котороые принимают значение #ЗНАЧ чтобы они перекрашивались, но я не смогу указать только ячекам которые приняли значение ошибки #ЗНАЧ только вследствии моей формулы.....
ВОТ

Maks the best
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 09.06.2005 (Чт) 12:34
Откуда: Санкт-Петербург

Сообщение Maks the best » 22.09.2005 (Чт) 13:19

у тебя там что на листе, сборище всяких ошибок ?

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 22.09.2005 (Чт) 14:03

Maks the best писал(а):у тебя там что на листе, сборище всяких ошибок ?


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

sergeyvg
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 16.08.2005 (Вт) 9:27

Сообщение sergeyvg » 23.09.2005 (Пт) 9:17

Без Worksheet_Change, к сожалению, не знаю как. Текст с условием, что FUNC вызывается только из ячеек, иначе еще проверку на Application.Caller надо навесить.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not RngBad Is Nothing Then
For Each R In RngBad
R.Interior.ColorIndex = 6
Next
Set RngBad = Nothing
End If
If Not RngGood Is Nothing Then
For Each R In RngGood
R.Interior.ColorIndex = xlNone
Next
Set RngGood = Nothing
End If
End Sub

в модуле:

Public RngBad As Range, RngGood As Range

Function FUNC(Значение As Variant, Ячейка1 As Variant) As Variant
Dim V As Range
Set V = Application.Caller

If Not IsDate(Ячейка1) Then
If RngBad Is Nothing Then
Set RngBad = V
Else
Set RngBad = Union(RngBad, V)
End If
Error (2)
End If
If RngGood Is Nothing Then
Set RngGood = V
Else
Set RngGood = Union(RngGood, V)
End If
FUNC = Значение
End Function

Павел_В
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 09.07.2005 (Сб) 9:52

Сообщение Павел_В » 24.09.2005 (Сб) 10:37

Про Application.Caller впервые слышу, спасибо большое, буду знать....

sergeyvg писал(а):Текст с условием, что FUNC вызывается только из ячеек, иначе еще проверку на Application.Caller надо навесить.


А как она еще может вызываться ???

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.09.2005 (Сб) 12:29

Из кода напрямую.


Короче, всем жать в офисе F1 и читать справку.
Секунд через 15 найдёте фразу о том, что функциям листа запрещено менять лист, в том числе перекрашивать.
Интересно, почему никто не делает этого до?

Павел_В писал(а):при условном форматировании я могу указать всем ячейка котороые принимают значение #ЗНАЧ чтобы они перекрашивались, но я не смогу указать только ячекам которые приняли значение ошибки #ЗНАЧ только вследствии моей формулы.....

А слабо наложить условное форматирование только на те ячейки, в которых твоя формула?
Последний раз редактировалось GSerg 24.09.2005 (Сб) 14:30, всего редактировалось 1 раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Павел_В
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 09.07.2005 (Сб) 9:52

Сообщение Павел_В » 24.09.2005 (Сб) 13:44

GSerg писал(а):Из кода напрямую.

А слабо наложить условное форматирование только на те ячейки, в которых твоя формула?


А как это сделать, ведь форма имеет не однозначный вид ??

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.09.2005 (Сб) 14:31

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

Павел_В
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 09.07.2005 (Сб) 9:52

Сообщение Павел_В » 24.09.2005 (Сб) 14:47

GSerg писал(а):Поясни эту мысль.


В условном форматировании я не смогу конретно указать при каком значении формулы перекрашивать ячейку, так как формула имеет не однозначный вид:
в одной ячейке =FUNC("привет", A1)
в другой ячейке =FUNC(123, A2)

Я не знаю как сдесь выделить общее и прописать это в условном форматировании....

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.09.2005 (Сб) 15:05

От же ж блин.
Ничё делать никто не хочет. Даже справку почитать...

Введи формулы.
Встань на одну из них.
Формат - Условное форматирование.
Условие 1: формула (а не значение).
Ввести в строку (в единственную строку, которая остаётся, когда выбираешь "Формула") текст =ТИП.ОШИБКИ(D4)=3, где D4 - та ячейка, на которой ты стоишь.
Выбрать формат (красный и всё такое).
Нажать OK.
Оставаясь на той же ячейке, нажать Кисть на панели инструментов "Стандартная".
Выделить весь остальной диапазон с твоими формулами.


ЗЫ: У ячейки есть свойства Formula, Value и Text. Ты понимаешь разницу между ними?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Павел_В
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 09.07.2005 (Сб) 9:52

Сообщение Павел_В » 27.09.2005 (Вт) 14:52

Это вариант, но не до конца решенный............
по трем причинам,
1. заранее не известно куда пользователь будет вставлять функцию (сделать условное форматирование на все ячйеки как то не то)
2. также он будет добавлять новые листы и там вставлять эту функцию (ну это еще ничего)
3. не только моя функция может возвратить ошибку Error(2) - #ЗНАЧ, поэтому сказать точно что ячейка покраснеет только от моей функции нельзя

Вот [sergeyvg]-у большое спасибо - это вариант хороший.
Но все равно спасибо всем большое за приобретенный опыт, действительно стоящий форумммммммм..... !!!


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList