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?

Обнуление всех переменных.

akobir

Дата: Среда, 06.05.2015, 11:24 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 201


Репутация:

9

±

Замечаний:
0% ±


Excel 2010

Добрый день!

Проблема следующая:
Есть цикл, который обрабатывает несколько документов.
В цикле используется множество переменных.
Как (и можно ли) сделать так, чтобы при переходе от документа к документу все переменные обнулялись?


e-mail: akobir.ismailov@gmail.com

 

Ответить

Manyasha

Дата: Среда, 06.05.2015, 11:31 |
Сообщение № 2

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

akobir, здравствуйте. Как вариант, запихать обработку файла в отдельную UDF, и в цикле вызывать эту функцию с нужными параметрами.


ЯД: 410013299366744 WM: R193491431804

 

Ответить

akobir

Дата: Среда, 06.05.2015, 11:46 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 201


Репутация:

9

±

Замечаний:
0% ±


Excel 2010

Manyasha, Думал об этом. :) Надеялся, что есть вариант проще…
[moder]Есть. Посмотреть макрос.


e-mail: akobir.ismailov@gmail.com

Сообщение отредактировал _Boroda_Среда, 06.05.2015, 11:52

 

Ответить

AndreTM

Дата: Среда, 06.05.2015, 13:41 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Надеялся, что есть вариант проще…

Дописать три строчки кода, сделать два копипаста… Куда проще-то уж? :D


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Hugo

Дата: Среда, 06.05.2015, 14:52 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

А какие проблемы обнулить переменные? Или проблема в том, что это множество нужно обнулять вручную индивидуально (в коде каждую прописать)? Так ведь один раз прописали уже где-то — можно использовать копипаст.
Или можно подойти кардинально — использовать одну переменную-массив. Только в индексах не запутайтесь.
Типа
[vba]

Код

Sub test()
     Dim a(1 To 10) As Double
     a(3) = 25.5
     a(5) = 36.6
     MsgBox a(3) & » — » & a(5)
     Erase a
     MsgBox a(3) & » — » & a(5)
End Sub

[/vba]


excel@nxt.ru
webmoney: R418926282008 Z422237915069

Сообщение отредактировал HugoСреда, 06.05.2015, 14:55

 

Ответить

RAN

Дата: Среда, 06.05.2015, 15:01 |
Сообщение № 6

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

А зачем вообще обнулять?
Инициализировать в начале цикла. Что, скорее всего, и происходит. За все время пришлось, может, пару раз обнулять отдельно.


Быть или не быть, вот в чем загвоздка!

 

Ответить

krosav4ig

Дата: Среда, 06.05.2015, 17:14 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

Или можно подойти кардинально

Вкл-Выкл режима конструктора, шоб наверняка
[p.s.]Этнияоносамо


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

vladimir-shagaliev

Дата: Среда, 06.05.2015, 20:16 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

[moder]Здесь этого не нужно писать. Удалил. Вы можете создать тему в свободном общении — это ветка форума такая.

Сообщение отредактировал _Boroda_Среда, 06.05.2015, 20:46

 

Ответить

akobir

Дата: Четверг, 07.05.2015, 13:59 |
Сообщение № 9

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 201


Репутация:

9

±

Замечаний:
0% ±


Excel 2010

Прошу администрацию сильно не пинать — но код приложить не могу — политика конфиденциальности. Заменять значения — реально очень долго.
Отвечаю на вопрос зачем обнулять:
Есть n-количество магазинов, которые обрабатываются. Все используют одинаковую отчетность, из которых, соответственно берутся данные.
Отчет формируется за каждый день.
Я, используя переменные и цикл считаю значения по столбцам для каждого магазина.
Далее это значение вставляю в сводный отчет и перехожу к следующему магазину.
Соответственно, чтобы переменные не продолжали складывать значения — необходимо обнулить.
Возможно, все это можно было прописать проще — но я не эксперт. :)

Как решил проблему:
Задал public-переменные в модуле и там же написал процедуру обнуления переменных.
После обработки каждого магазина вызывается процедура обнуления, после этого переход к следующему.


e-mail: akobir.ismailov@gmail.com

 

Ответить

Саня

Дата: Пятница, 08.05.2015, 11:46 |
Сообщение № 10

Группа: Друзья

Ранг: Ветеран

Сообщений: 1067


Репутация:

560

±

Замечаний:
0% ±


XL 2016

Как (и можно ли) сделать так, чтобы при переходе от документа к документу все переменные обнулялись?

в качестве развлечения, видимо…
[vba]

Код

sub s1()
   ‘ здесь код

   ‘ «вызываем» след. процедуру
   application.ontime now+timeserial(0,0,2),»s2″
   end
end sub

sub s2()
   ‘…
end sub

[/vba]

 

Ответить

AndreA SN

1014 / 118 / 2

Регистрация: 26.08.2011

Сообщений: 1,113

Записей в блоге: 2

1

11.11.2021, 13:55. Показов 1645. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Нарисовал вот такое

Visual Basic
1
2
3
4
5
6
7
8
9
Dim rng
...
 
 
            On Error Resume Next
            Set rng = Range("A2:A" & n).SpecialCells(xlCellTypeVisible)
...
            If IsEmpty(rng) = False Then 
                 rng = Nothing ' вот тут неправильно

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



0



2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,141

11.11.2021, 14:02

2

Лучший ответ Сообщение было отмечено AndreA SN как решение

Решение

Set Rng = Nothing



1



1014 / 118 / 2

Регистрация: 26.08.2011

Сообщений: 1,113

Записей в блоге: 2

11.11.2021, 15:49

 [ТС]

3

Narimanych, спасибо, особенно за цитату.



0



2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,141

11.11.2021, 16:04

4

AndreA SN,



0



У меня ситуация, когда мне нужно 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

Понравилась статья? Поделить с друзьями:
  • Vba excel обновление запроса
  • Vba excel обновить экран
  • Vba excel обновить формулы в excel
  • Vba excel обновить форму
  • Vba excel обновить все сводные таблицы