Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Получить список всех объявленных переменных из кода, NopePad++ и Locals Window не предлогать :)
 
Добрый День!

Искал и по этому форуму и в гугле, но ни чего к сожалению не нашел :(
Вопрос такой, есть скажем в модуле объявленные переменные допустим:

Код
Public WsR as Worksheet
Public i as Integer, j as Long, s as String


К примеру требуется перед завершением выполнения кода получить список всех переменных и очистить их.

Все что смог сделать, это получить имена переменых в текстовом виде.
А вот как обратиться к переменной зная ее текстовое имя или как получить список всех переменных виде самих же переменных, или как очистить/удалить из памяти эту переменную зная ее имя, вот с этим разобраться не могу.
Помогите, пожалуйста! ... кто чем может :)

пример моего кода:
Код
Public WsPD As Worksheet
Public Folder2 As Folder
Public NedStart As Date, NedFin As Date
Public z As Byte, FVS As Byte, RN As Byte
Public MagArr()

Sub test()

'Получаем список всех модулей, форм, листов и т.д. в данной книге
For Each iVBcomponent In ThisWorkbook.VBProject.VBComponents
    'Проверяем являеться ли модулем или формой
    If iVBcomponent.Type = 1 Or iVBcomponent.Type = 3 Then
        'Построчно просматриваем часть модуля с объявленными переменными
        For i = 1 To iVBcomponent.CodeModule.CountOfDeclarationLines
            'Разделям по ","
            x = Split(iVBcomponent.CodeModule.Lines(i, 1), ",")
            'просматриваем получившиеся части
            For j = 0 To UBound(x)
                'Разделям по " " и выбираем переменную
                x1 = Split(x(j), " ")(1)

'**********************************************************************
'Выделенная часть на данный момент не имеет смысла, так как x1 всегда будет string содержащий имя переменной

                Debug.Print x1, TypeName(x1)
                'определяем тип переменной
                Select Case VarLife(x1)
                    Case 1
                        Set x1 = Nothing
                    Case 2
                        Erase x1
                    Case 3
                        x1 = ""
                End Select
'*********************************************************************
            Next j
        Next i
    End If
Next

End Sub

Function VarLife(curVariables As Variant) As Byte
    If IsObject(curVariables) Then VarLife = 1: Exit Function
    If IsArray(curVariables) Then VarLife = 2: Exit Function
    VarLife = 3
End Function

Как очистить память после Rows.Delete, После выполнения Rows.delete, используемая Екселем память увеличивается примерно в два раз
 
Добрый День!

Столкнулся с такой проблемой.

после выполнения кода используемая память увеличивается примерно на 90мб.

Кол-во строк в диапозоне примерно 700.
WsR.Range("AD1:BG" & WsR.AutoFilter.Range.Rows.Count).Delete xlShiftToLeft

Или Вот такая строка, используется в цикле, и тоже добавляет +100мб в память, после окончания цикла
WsR.Rows(j + 1 & ":" & j + 1).Delete Shift:=xlUp

WsR - это глобальный объект "Лист"
Проблема заключается в том, что листов в книге может быть много (до 160), данная оперецая производиться один раз на каждом листе, и каждый раз добавляет в память +90мб, что современем приводит к недостатку системных ресурсов.

Вот и возник вопрос, как очистить память?
По ощущениям, после Range.Delete - в памяти хранится копия листа, содержащая лист "до удаления".

При этом использование далее в коде set WSR=Nothing не приносит желаемого результата.
Теоретически должно помочь открытие и закрытие книги, которым принадлежат эти листы, но это совсем неподходит.

Если есть какие-нибудь соображения или решения, буду рад услышать.
Спасибо!
Изменено: SkyShark - 18.01.2013 11:09:42
Страницы: 1
Наверх