Vba excel как очистить переменную

 

KUDRIN

Пользователь

Сообщений: 324
Регистрация: 30.12.2012

#1

07.04.2015 18:49:26

Здравствуйте!
подскажите, где почитать про обнуление переменных?
что-то типа таблички

Код
Erase a 'массив
Set a = Nothing 'object, range
a = VbNullString '$
a = "" '$
a = Empty '&
a = 0 '&

какие из них универсальные? например из этого списка «a = Empty» работает и для & и для $

Изменено: KUDRIN07.04.2015 19:31:23

 

Про Erase и Nothing — в Справке.
VbNullString и «» это разные вещи, в Справке тоже упоминается.
Empty это константа типа Variant, поэтому при присвоении преобразуется в 0, пустую строку, False.

 

KUDRIN

Пользователь

Сообщений: 324
Регистрация: 30.12.2012

#3

07.04.2015 19:05:58

Цитата
Казанский написал: Про Erase и Nothing — в Справке.

Имеется ввиду не про каждую команду в отдельности (название которой еще поискать нужно),
а в комплексе про все команды обнуления.
Или может быть есть табличка, в которой указаны все команды обнуления со ссылкой в справку для каждой конкретной команды из этой таблички.

Примерно как в

этой статье

про объявление переменных

Изменено: KUDRIN07.04.2015 19:31:41

 

Добрый вечер
Может посмотреть на значения неинициализированных переменных?

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

А зачем, собственно, обнуление потребовалось? Я понимаю некоторые объекты и массивы. Но остальные-то переменные.После выполнения процедуры объявленные внутри неё переменные сами обнуляются и память не засоряют. Следовательно очистка как таковая ничего не даст…

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

KUDRIN

Пользователь

Сообщений: 324
Регистрация: 30.12.2012

Alexander88

, Нашел только для C —  

https://msdn.microsoft.com/ru-ru/library/83fhsxwc.aspx

, есть ссылка для Excel ?

The_Prist

, Это уже вопрос другой. Была

похожая тема

, из четырех ответов — подходящим оказался только один. Так и здесь — зачем и почему, можно пообсуждать, но когда вообще нет такой таблички, то неудобно. Банально переменная используется в цикле и приходится либо присваивать значение и обнулять через if else или обнулять через подобные команды, список которых я и ищу.
или например объект забивает память до 100%, если обрабатывается в цикле без обнуления

Изменено: KUDRIN07.04.2015 19:34:25

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Тут как бы понимаете…Вопрос зачем не совсем от лени задан. Если для очистки памяти — то это лишнее. Если для дальнейшего использования — значит алгоритмы хромают. Ведь Вы сами назначаете значения переменным и вольны делать проверки их значения.
Но раз так надо, то по простому:
Integer,Long,Byte,Double,Decimal(уже не используется),Currency,Syngle,Date = по умолчанию имеют значение 0. Его и надо присваивать.
String — =»»
Array — Erase Arr
Object — Set obj = Nothing

Variant в зависимости от назначенного типа. Но можно просто =0.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

По поводу Object… Где-то когда-то мелькало, что переменные объектов чистить обязательно, иначе остаются в памяти.
Завршаем процедуру — чистим.
Правда? Неправда?

 

KUDRIN

Пользователь

Сообщений: 324
Регистрация: 30.12.2012

#9

07.04.2015 19:50:36

Буратине дали три яблока. Два он съел. Сколько яблок осталось у Буратины? Думаете одно? Ничего подобного. Никто же не знает сколько у него уже было яблок до этого. Мораль — обнуляйте переменные!!!

The_Prist

, Спасибо за комментарий по разным типам переменных

Цитата
Правда? Неправда?

Однозначно да или нет не могу сказать, но это как минимум зависит конкретно от самого объекта и от количества циклов, прецеденты уже были. если проблем в конкретном примере нет, то наверное и не обязательно

Изменено: KUDRIN07.04.2015 19:55:22

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Вить, на самом деле не совсем правда. VB вычищает память после завершения процедуры. Правда, не всегда корректно может это сделать именно для объектов. В последних версиях VBA не наблюдал такого.
Проблемы могут возникнуть при очистке переменных уровня проекта — с ними у VBA бывают проблемы при закрытии проекта, в котором они были инициализированы. При этом это могло повлечь остаток в памяти ссылки на уже не существующий объект, с которым она все еще была связана(можно наблюдать это при попытке переместить файл и запрет ОС на это — спасает разблокировка процесса путем закрытия Excel).

Для своей уверенности лучше очищать. В больших проектах так делаю. А вообще в последнее время обленился с этим делом в VBA — редко это делаю. Но и проблем от этого не наблюдал. Вот в C это дело не прощается — лучше вычистить все :-)

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Понял, спасибо.
Резюме: публичные лучше очищать.

 

Alexander88

Пользователь

Сообщений: 400
Регистрация: 02.09.2014

#12

07.04.2015 20:08:13

Цитата
KUDRIN написал: есть ссылка для Excel ?

Можно посмотреть в окне Locals при обьявлении
Всегда интересно было, как очистить в такой конструкции? :)

Код
With CreateObject("VBScript.RegExp")
    '
    '
End With

Изменено: Alexander8807.04.2015 20:11:12

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Никак. Объект сразу после End With уничтожается.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Alexander88

Пользователь

Сообщений: 400
Регистрация: 02.09.2014

#14

07.04.2015 20:34:41

The_Prist, Спасибо

Содержание

  • Как сбросить все переменные в Excel VBA?
  • Как очистить переменную в VBA?
  • Как очистить переменную?
  • Как очистить кеш памяти в Excel VBA?
  • Как выпустить объект в VBA?
  • Как очистить массив в VBA?
  • Как очистить строку в VBA?
  • Как использовать Isblank в VBA?
  • Нулевой или пустой в VBA?
  • Как проверить, пуста ли переменная?
  • Что такое пустая переменная?
  • Как очистить переменную в R?
  • Безопасно ли удалить Officefilecache?
  • Где хранится кеш Excel?

Код VB:

  1. Вариант явный.
  2. Dim mlLongVar As Long.
  3. Sub ProcOne ()
  4. mlLongVar = 10.
  5. MsgBox mlLongVar.
  6. mlLongVar = Пусто ‘Сброс настроек ничего.
  7. Конец подписки.
  8. Sub ProcTwo ()

Как очистить переменную в VBA?

Вы можете назначить ключевое слово Empty, чтобы явно установить для переменной значение Empty. Используйте функцию IsEmpty чтобы проверить, инициализирована ли переменная. Функция возвращает логическое значение — возвращает True для неинициализированной переменной или если для переменной явно задано значение Empty, в противном случае функция возвращает False.

Как очистить переменную?

Описание. В Командлет Clear-Variable удаляет данные, хранящиеся в переменной, но не удаляет переменную. В результате значение переменной равно NULL (пусто). Если переменная имеет указанный тип данных или объекта, этот командлет сохраняет тип объекта, хранящегося в переменной.

Как очистить кеш памяти в Excel VBA?

Использование кода VBA

Дважды щелкните «ThisWorkbook» на панели «Проект» слева. Это откроет окно кода. Чтобы запустить код, нажмите F5. Это очистит кеш сводных таблиц в активной книге.

Как выпустить объект в VBA?

Освободить все объектные переменные из памяти

  1. Name = Range («GroupName»)
  2. Eff = Диапазон («EffDate»)
  3. Spec = Range («SpecDed»)
  4. Spec2 = Диапазон («g35»)
  5. Spec3 = Диапазон («g36»)
  6. Установите Name = Nothing.
  7. Установите Eff = Nothing.
  8. Установите Spec = Nothing.

Как очистить массив в VBA?

VBA Очистить массив (стереть)

Тебе следует используйте оператор «Стереть» очистить массив в VBA. Добавьте ключевое слово «Erase» перед именем массива, который вы хотите очистить, но обратите внимание, что все значения будут сброшены из массива. В следующем массиве у вас есть 3 элемента, и мы использовали оператор erase, чтобы стереть все.

Как очистить строку в VBA?

Вариантная переменная имеет пустое значение до того, как ей будет присвоено значение.

  1. Инициализация варианта. Тип данных Empty — это значение по умолчанию, когда вы объявляете переменную как Variant. …
  2. Empty = 0. Ключевое слово Empty также является нулевым значением. …
  3. Empty = «» Ключевое слово Empty также является строкой нулевой длины. …
  4. Функция IsEmpty. …
  5. vbVarType.

Как использовать Isblank в VBA?

Если вы хотите проверить, пуста ли ячейка рабочего листа в VBA, вы не можете использовать функцию рабочего листа ISBLANK. В VBA вы должен использовать функцию ISEMPTY. В этом примере мы проверим, пуста ли ячейка A1. Если ячейка A1 пуста, отобразится сообщение «Ячейка A1 пуста».

Нулевой или пустой в VBA?

НУЛЕВОЙ в VBA — это логическая функция, которая используется для определения, является ли данная ссылка пустой или NULL или нет, поэтому имя ISNULL, это встроенная функция, которая дает нам истинный или ложный результат в зависимости от результата, который мы можем получить к выводам, если ссылка пуста, она возвращает истинное значение, иначе ложь …

Как проверить, пуста ли переменная?

Чтобы узнать, пуста ли переменная bash:

  1. Вернуть истину, если переменная bash не установлена ​​или установлена ​​в пустую строку: if [-z «$ var»];
  2. Другой вариант: [-z «$ var»] && echo «Пусто»
  3. Определите, пуста ли переменная bash: [[! -z «$ var»]] && echo «Не пусто» || эхо «Пусто»

Что такое пустая переменная?

Переменная считается пустой если он не существует или его значение равно false .

Как очистить переменную в R?

Очистка окружающей среды

  1. Использование команды rm (): если вы хотите удалить одну переменную из среды R, вы можете использовать команду «rm ()», за которой следует переменная, которую вы хотите удалить. -> rm (переменная) …
  2. Использование графического интерфейса: мы также можем очистить все переменные в среде, используя графический интерфейс на панели окружения.

Безопасно ли удалить Officefilecache?

Исправить кэш документов Office

Когда происходит повреждение файла кеша, ваш файл будет казаться застрявшим в Центре загрузки Office. … Удаление кеша — это не такт опасно, и это может решить проблему синхронизации.

Где хранится кеш Excel?

Windows 11/10: C: Users AppData Local Microsoft Office UnsavedFiles. Windows 8/7 / Vista: C: Users UserName AppData Local Microsoft Office UnsavedFiles. Windows XP: C: Documents and Settings UserName Local Settings Application Data Microsoft Office UnsavedFiles.

Интересные материалы:

Как работает проверка имён?
Как работает провод?
Как работает proxmox?
Как работает PSP?
Как работает пылесос?
Как работает радио Baofeng?
Как работает радио Bose Wave?
Как работает радиотелефон?
Как работает распродажа флеш-памяти Amazon?
Как работает разблокировка по лицу Xiaomi?

У меня ситуация, когда мне нужно clear переменную lastWord, чтобы msgbox ничего не отображал в следующем loop.

Следующий код — это просто пример.

Sub clear_lastWord_Variable()

    Dim wordArr() As String
    Dim lastword As String
    Do
        selection.Find.ClearFormatting
        selection.Find.Font.Bold = True
        With selection.Find
            .Forward = True
            .Wrap = wdFindStop
        End With
        selection.Find.Execute

        If selection.Find.Found Then

            wordArr = Split(selection, " ")

            For i = LBound(wordArr) To UBound(wordArr) Step 1
                lastword = wordArr(i)

            Next i

            MsgBox lastword

            ' here should be something to clear lastword
        Else
            Exit Do
        End If
    Loop

End Sub

Это видео может помочь вам узнать секретный трюк https://youtu.be/MaiSBVguh28

2 ответа

Лучший ответ

Вы не можете «очистить» переменную, не являющуюся объектом, вы можете только установить для нее определенное значение. Для строковой переменной это обычно пустая строка "".

lastword = ""

Или (идентичный)

lastword = vbNullString

Для объектных переменных существует Set myObj = Nothing.


17

Andre
15 Май 2016 в 07:30

Если ваша переменная не является объектом, вы также можете:

lastword = Empty


6

I.Samp
21 Дек 2018 в 09:52

Помогаю со студенческими работами здесь

При вызове объекта Range, VBA самостоятельно меняет Range на rAnge
Всем доброго дня, у меня такой вопрос.

По незнанию создал функцию rAnge(), теперь при вызове…

Содержимое переменной в качестве имени переменной
Подскажите пожалуйста возможно ли использовать содержимое строковой переменной (допустим…

Изменение типа данных Range
Здравствуйте, форумчане.
Вопрос от ученика.
Есть макрос, который сравнивает данные в таблице и в…

Out of range в поле типа TIME
Здравствуйте!
Есть поле типа TIME со значением 00:00:00. Пытаюсь увеличить его на 660, выдает…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

2

i fell into a case where clearing the entire array failed with dim/redim :

having 2 module-wide arrays, Private inside a userform,

One array is dynamic and uses a class module, the other is fixed and has a special type.

Option Explicit

Private Type Perso_Type
   Nom As String
   PV As Single 'Long 'max 1
   Mana As Single 'Long
   Classe1 As String
   XP1 As Single
   Classe2 As String
   XP2 As Single
   Classe3 As String
   XP3 As Single
   Classe4 As String
   XP4 As Single
   Buff(1 To 10) As IPicture 'Disp
   BuffType(1 To 10) As String
   Dances(1 To 10) As IPicture 'Disp
   DancesType(1 To 10) As String
End Type

Private Data_Perso(1 To 9, 1 To 8) As Perso_Type

Dim ImgArray() As New ClsImage 'ClsImage is a Class module

And i have a sub declared as public to clear those arrays (and associated run-time created controls) from inside and outside the userform like this :

Public Sub EraseControlsCreatedAtRunTime()
Dim i As Long
On Error Resume Next
With Me.Controls 'removing all on run-time created controls of the Userform :
    For i = .Count - 1 To 0 Step -1 
        .Remove i
    Next i
End With
Err.Clear: On Error GoTo 0

Erase ImgArray, Data_Perso
'ReDim ImgArray() As ClsImage ' i tried this, no error but wouldn't work correctly
'ReDim Data_Perso(1 To 9, 1 To 8) As Perso_Type 'without the erase not working, with erase this line is not needed.
End Sub

note : this last sub was first called from outside (other form and class module) with Call FormName.SubName but had to replace it with Application.Run FormName.SubName , less errors, don’t ask why…

Like this post? Please share to your friends:
  • Vba excel как очистить listbox
  • Vba excel как отправить файл
  • Vba excel как отобразить скрытую строку
  • Vba excel как отладить
  • Vba excel как открыть текстовый файл