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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2011, 13:41   #1
Руслан Т.
Новичок
Джуниор
 
Регистрация: 11.03.2011
Сообщений: 2
По умолчанию Обновление ячейки с собственной функцией VBA

Здравствуйте.

Подскажите, а то я никак не пойму. Если в Excel мы задаём формулу, н-р, в ячейке А3 вида =A1+A2 , то при изменении ячеек А1 или А2 результат в ячейке А3 автоматически пересчитается.

Однако если мы в А3 запишем собственную VBA-функцию =функ() вида:

Код:
Public Function функ()
  Dim a As Double
  Dim b As Double  
  a = Range("A1").Value
  b = Range("A2").Value
  функ = a + b
End Function
то при изменении ячеек А1 или А2 результат в ячейке А3 автоматически не пересчитается.

Думаю, вопрос понятен: как сделать так, чтобы ячейка А3 с функцией =функ() пересчитывалась автоматически при изменении данных в ячейках А1 и А2? Либо пересчитывалась при любом изменении данных на рабочем листе?
Руслан Т. вне форума Ответить с цитированием
Старый 11.03.2011, 13:57   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Public Function функ()
  Dim a As Double
  Dim b As Double
  Application.Volatile
  a = Range("A1").Value
  b = Range("A2").Value
  функ = a + b
End Function
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.03.2011, 14:02   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Как вариант

Код:
=функ(A1;A2)
Public Function функ(a As Range, b As Range)
  функ = a + b
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 11.03.2011, 14:14   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

обьявите свою функцию так:
Код:
Public Function функ(a As Range, b As Range)
  функ = a + b
End Function
передайте ей аргументами ссылки на ячейки А1 и А2 и будет Вам счастье! (причем, при каждом изменении значений в А1 или А2).

Ecxel не персчитывает все подряд, а только то, что "нуждается" в пересчете. при Вашем способе обьявления и вычисления у функции не было явных ячеек от которых она зависит, очень она у Вас самостоятельная, "не зависит от ячеек - нечего и пересчитывать" - приблизительные "мысли" Ecxel.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.03.2011, 14:16   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

мы с Серегой не сговаривались)))
я писал дольше потому что употребил много букв...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.03.2011, 21:34   #6
Руслан Т.
Новичок
Джуниор
 
Регистрация: 11.03.2011
Сообщений: 2
По умолчанию

Hugo121, doober, IgorGO спасибо за ответы. Действительно, работают все варианты: и с Application.Volatile и с явным указанием аргументов функции.
Руслан Т. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вытягивание формата ячейки (VBA) rexec Microsoft Office Excel 4 11.03.2010 15:01
Обновление ячейки doober Microsoft Office Excel 3 31.12.2009 18:55
Помогите разобраться с собственной функцией MasterofCDM Общие вопросы Delphi 4 03.04.2009 12:15
защита ячейки в VBA tat-besidovska Microsoft Office Excel 4 06.02.2008 04:57