Страницы: 1
RSS
Excell не пересчитывает автоматом формулы, содержащие пользовательские функции
 
Excell 2003. Вставил  модуль с пользовательской функцией. При этом ячейки с формулами, содержащими эту функцию не пересчитываются автоматически - только при пинке Alt-Ctrl_F9. В  настройках, ессно, указано пересчитывать автоматом. Формулы, не обращающиеся к этой функции пересчитываются нормально, автоматом. Вопрос: Как заставить пересчитывать автоматом ВСЕ формулы, даже включающие пользовательские функции.
 
Добавить в функции другие, летучие.
 
Добавьте в текст каждой пользовательской функции, желательно первым исполняемым оператором:  
Application.Volatile
 
Увы, не помогает ни тот ни другой ни оба вместе... :-(((  
Ничего не изменилось. Не помогает даже изменение высоты строки (мышкой)  
Функция для подсчета ячеек с определённым цветом фона:  
 
Function color_count(my_range As Range, active_color_cell As Range) As Integer  
Application.Volatile  
curdate = Now() - 1  
color_count = 0  
active_color = active_color_cell.Interior.ColorIndex  
 
For Each cc In my_range.Cells  
 
If cc.Interior.ColorIndex = active_color Then  
color_count = color_count + 1  
End If  
 
Next cc  
End Function
 
привяжите пересчет к событию Worsheet_SelectionChange и после смены фона ячейки переходите на другую ячейку
 
Если не сложно, можно чуть подробнее, что вписать в тело модуля?  
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
 
?????????????????????  
 
End Sub
 
Application.Calculate - все книги и листы  
или  
Target.Worksheet.Calculate - лист, на котором произошло событие  
 
пс. это не "тело модуля", это тело процедуры ;)
 
The_Prist, а Target.Worksheet.Calculate не сработает? или медленнее будет на пару миллионных долей секунды? :)
 
Спасибо. Заработало.  
Но обнаружился пренеприятнейший побочный эффект: невозможность вставки. В меню пункт "вставить" неактивен (хотя в буфере есть данные), а при выполнении, например, кода:  
 
Columns("A:B").Select  
   Selection.Copy  
   Columns("BA:BB").EntireColumn.Select  
   ActiveSheet.Paste  
 
выдаётся сообщение об ошибке.  
 
Может у кого есть ещё идеи???
 
Me.usedrange.Calculate  
Работает без побочных эффектов!!!  
 
Спасибо всем принявшим участие, и отдельное спасибо The_Prist!!!
 
ясно, а то я испугался немножко поначалу.  
согласен, Me - и короче, и красивше.  
просто до сих пор я до этого не дошёл.  
теперь запомню, спасибо.
 
Дим, а чем плохо  
Range("A:B").Copy [BA1]
?
Я сам - дурнее всякого примера! ...
 
И правильней:  
Intersect(ActiveSheet.UsedRange, [a:b]).Copy [ba1]
Я сам - дурнее всякого примера! ...
 
А как в таком выражении со второй строки?  
Range("BA:BB").EntireColumn  
или в таком:  
Range("A:B").Copy [BA1]
Но во всех случаях(кроме случая, когда столбец полностью заполнен) решает  
Intersect(ActiveSheet.UsedRange, [a:b]).Copy [ba1]
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=11.04.2011 07:29}{thema=}{post}Но во всех случаях(кроме случая, когда столбец полностью заполнен) решает  
Intersect(ActiveSheet.UsedRange, [a:b]).Copy [ba1]{/post}{/quote}
 
а если UsedRange на листе начинается не с первой строки?  
результат будет немного неожиданным для пользователя? :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
А почему мы априори считаем пользователя полным идиотом? И кто ему мешает вместо [BA1] указать [BA5] и т.д. И UsedRange врядли будет часто ерзать по листу. Но если так уж хочется копировать колонки целиком - на здоровье, есть предыдущие два варианта. Вариант с Intersect как раз для того, чтоб не копировать лишнее.
 
П.С. если задаться целью придумывать разные А ЕСЛИ, то и за комп садиться не стоит:-)
Я сам - дурнее всякого примера! ...
Страницы: 1
Читают тему
Наверх