asbo
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору KorolCOOL Цитата: Если я в программе использую переменные типа Object, то после выполнения программы, память, занимаемая этими переменными, автоматически освобождается или необходимо явно это сделать (насколько я знаю так: Set Var = Nothing)? | Если вопрос именно по механизму выделения и освобождения памяти VBA, то лучше специализированный поиск по нему и делать. И по времени жизни и области видимости переменных в VBA. Теоретически, в общем случае, можно и не выгружать принудительно, если процедура, где он обявлен завершается, но использование явного уничтожения считается хорошим тоном. Если же область видимости шире, чем процедура - то надо явно уничтожать. Говорят, что иногда и перед переназначением, но я не сталкивался. И, что касается Nothing, то, он не всегда корректно действует. Часто приходится использовать метод объекта .Close. В ответственных местах, чтобы не забивать голову я использую оба. Столкнулся с этим с некоторыми объектами Recordset. Добавлено: ZlydenGL Наверное лучше: If Target = Range("$A$1") Ни хрена не лучше :) Добавлено: smirnvlad У меня все нормально работает, без трансформаций форматов. Вот пример. В ячейках A5-A7 данные. B1-B7 ссылаются на A5-A7. Копирование идет в D5-D7. Код: Sub sb_Copy() Dim rSrc As Range, rTgt As Range Dim vArr() As Variant Set rSrc = Range("B5:B7") Set rTgt = rSrc.Offset(0, 2) 'Debug.Print "- - - -" & vbLf: Call sb_Debug(rSrc): Call sb_Debug(rTgt) vArr = rSrc.Value Debug.Print "- - - -" & vbLf: Call sb_Debug(rSrc): Call sb_Debug(rTgt) rTgt.Value = vArr Debug.Print "- - - -" & vbLf: Call sb_Debug(rSrc): Call sb_Debug(rTgt) End Sub Sub sb_Debug(pRng As Range) Dim cl As Range For Each cl In pRng.Cells With cl Debug.Print .Address & "; " & _ .Formula & "; " & _ .Value & "; " & _ .NumberFormat & "; " & _ .NumberFormatLocal End With Next Debug.Print vbLf End Sub |
| Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 11:56 15-07-2011 | Исправлено: asbo, 12:31 15-07-2011 |
|