Страницы: 1
RSS
Worksheet.Calculate и Копипаст
 
Есть книга, на каждом листе много формул и при пересчёте на листе одной позиции Эксель делает ненужный мне пересчёт остальных листов тратя на это ощутимое кол-во времени.  
 
Я избавился от этого поставив при открытии переключатель на ручной пересчёт, а на каждом листе книги - принудительный пересчёт при изменении.  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
Target.Worksheet.Calculate  
End Sub  
 
А теперь проблема - при копировании ячеек их можно вставить только один раз, после чего лист принудительно пересчитывается и буфер обмена очищается. как сделать чтобы он сохранялся после пересчёта?  
 
или может посоветуйте как другим способом запретить ненужные пересчёты в автоматическом режиме
 
http://www.planetaexcel.ru/forum.php?thread_id=2684
 
да, всё получилось!  
 
функция положить в буфер  
Public Function PutOnClipboard(Obj As Variant)  
Dim MyDataObj As New DataObject  
MyDataObj.SetText Format(Obj)  
MyDataObj.PutInClipboard  
End Function  
 
функция извлечь из буфера  
Public Function GetOffClipboard() As Variant  
Dim MyDataObj As New DataObject  
MyDataObj.GetFromClipboard  
GetOffClipboard = MyDataObj.GetText()  
End Function  
 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)  
буфер = GetOffClipboard  
Target.Worksheet.Calculate  
PutOnClipboard (буфер)  
End Sub  
 
 
 
спасибо!
 
так...а теперь новый вопрос - как сделать чтобы параметры форматов ячеек тоже в буфер сохранялись?
 
и относительные ссылки он как абсолютные сохраняет :(
 
в общем разобрался :)  
 
если кому интересно, то сделал вот так    
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)  
буфер = GetOffClipboard  
 
If IsEmpty(буфер) Or буфер = "" Then Selection.Copy  
 
End Sub
Страницы: 1
Читают тему
Наверх