Страницы: 1
RSS
"Зависает" форма, но помогает от зависания странный алгоритм. Почему???
 
Сразу извинюсь, форма большая сложная и содержит комм. тайну, выложить не могу. Суть проблемы в том, что форма иногда "зависает", т.е. перестает пересчитываться. Решение проблемы как бы есть, но я не могу понять логики. Поясню: помогает удаление строки, которое делается по макросу. Вот код:  
  With Application  
    .ReferenceStyle = xlA1  
    .EnableEvents = False  
    .ScreenUpdating = False  
    .Calculation = xlCalculationManual  
  End With  
 RB = ActiveCell.Row  
 CB = ActiveCell.Column  
 MaxLen = [R1]
 If (RB > 11) And (RB <= MaxLen) Then  
   ActiveSheet.Unprotect Password:="xxxxxxxx"  
   Dlina = ActiveSheet.Range("R1").Value  
   ActiveSheet.Range("R1").Value = Dlina - 1  
   Rows(RB).EntireRow.Delete  
   Cells(RB, CB).Select  
   ActiveSheet.Protect Password:="xxxxxxxx"  
 End If  
  With Application  
    .EnableEvents = True  
    .Calculation = xlCalculationAutomatic  
    .ScreenUpdating = True  
  End With  
 
НО!!! аналогичный нижеследующий код не помогает!!!  
 
With Application  
    .ReferenceStyle = xlA1  
    .EnableEvents = False  
    .ScreenUpdating = False  
    .Calculation = xlCalculationManual  
  End With  
 RB = ActiveCell.Row  
 CB = ActiveCell.Column  
 Dim FromLitera As Variant  
 Dim ToLitera As Variant  
 FromLitera = Array("B", "D", "F", "H")  
 ToLitera = Array("B", "D", "F", "K")  
 If RB > 11 Then  
   ActiveSheet.Unprotect Password:="0002"  
   Dlina = ActiveSheet.Range("R1").Value  
   ActiveSheet.Range("R1").Value = Dlina + 1  
   ActiveCell.EntireRow.Insert  
   ActiveSheet.Rows(RB + 1).Copy  
   ActiveSheet.Rows(RB).PasteSpecial Paste:=xlPasteAll, _  
                    Operation:=xlNone, SkipBlanks:=False, Transpose:=False  
   For i = 0 To 3  
     ActiveSheet.Range(FromLitera(i) & RB & ":" & ToLitera(i) & RB).ClearContents  
   Next i  
   Cells(RB, CB).Select  
   ActiveSheet.Protect Password:="0002"  
 End If  
  With Application  
    .EnableEvents = True  
    .Calculation = xlCalculationAutomatic  
    .ScreenUpdating = True  
  End With  
 
Включение-выключение макропараметров одинаково, разница в том что в одном коде удаление строки, в другом вставка. В чем прикол с удалением строки? Проблема - блажь, но дюже непонятно.
 
> форма иногда "зависает", т.е. перестает пересчитываться  
 
Что значит "зависает"?    
Что НА ФОРМЕ пересчитывается???  
 
А если в момент "зависания" формы нажать Ctrl + Break, на какой строке кода останавливается выполнение?  
 
> форма большая сложная и содержит комм. тайну  
ни разу не видел ФОРМУ, содержащую коммерческую тайну:)  
данные - другое дело, но их можно поменять на что-то бессмысленное.  
 
Вряд ли Вам смогут помочь, не увидев файла...
 
если не ошибаюсь Вы просто меняете либо пересчет в ручном или в автомат режиме.  
Для самого пересчета вроде писать надо просто  
 
Calculate  
 
вроде так , тогда при ручном режиме пересчета произойдет пересчет книги.
 
> А если в момент "зависания" формы нажать Ctrl + Break, на какой строке кода останавливается выполнение?  
 
Прошу прощения, неверно выразился. Форма не зависает, все макросы выполняются. Отключается пересчет. Как будто если бы enablecalculation = false. После запуска алгоритма удаления строки - пересчет опять включается.  
 
> Calculate  
вроде так , тогда при ручном режиме пересчета произойдет пересчет книги.  
 
аналогичным образом действует Application.Calculation = xlCalculationAutomatic  
Эта строка есть в обоих алгоритмах, но удаление строки работает, а вставка - нет.
 
> ни разу не видел ФОРМУ, содержащую коммерческую тайну:)  
данные - другое дело, но их можно поменять на что-то бессмысленное.  
 
Дело в том, что сами алгоритмы считаются у нас не подлежащими разглашению, а с такой проблемой форму даже не обрежешь до нужного куска. Данные понятно, можно стереть или заменить апельсинами.
Страницы: 1
Читают тему
Наверх
Loading...