Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Объявление глобальных переменных - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объявление глобальных переменных (Формулы/Formulas)
Объявление глобальных переменных
Olena Дата: Четверг, 10.11.2022, 10:48 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 1 ±
Замечаний: 20% ±

Доброго времени. Подскажите пожалуйста, правильно ли я объявляю глобальные переменные и вызываю их.
Задумка такова. У мня много однотипных кодов и правом надоело их копировать и вставлять. Подсказали мне про глобальные переменные, до этого понятия не имела.
Смысл какой:
- объявляю переменную, а под ней могу иметь ввиду именованый диапазон(в примере), расчет формульный, сравнение.
и все это описываю в отдельный макросах.
Проблема в том, что по переменной я их не могу вызвать почему то , постоянно надо заходить в модуль и запускать их. Решение в примере сделала следующим образом
[vba]
Код
call (имя макроса)
[/vba]
Но ведь это наверное не правильно?
Подскажите как правильно объявить переменную в корой будет проходить расчет, но в форму в инициализацию будет записана только переменная а не весь код. Или я все в корне не верно понимаю.
К сообщению приложен файл: KONS.xlsm (17.9 Kb)
 
Ответить
СообщениеДоброго времени. Подскажите пожалуйста, правильно ли я объявляю глобальные переменные и вызываю их.
Задумка такова. У мня много однотипных кодов и правом надоело их копировать и вставлять. Подсказали мне про глобальные переменные, до этого понятия не имела.
Смысл какой:
- объявляю переменную, а под ней могу иметь ввиду именованый диапазон(в примере), расчет формульный, сравнение.
и все это описываю в отдельный макросах.
Проблема в том, что по переменной я их не могу вызвать почему то , постоянно надо заходить в модуль и запускать их. Решение в примере сделала следующим образом
[vba]
Код
call (имя макроса)
[/vba]
Но ведь это наверное не правильно?
Подскажите как правильно объявить переменную в корой будет проходить расчет, но в форму в инициализацию будет записана только переменная а не весь код. Или я все в корне не верно понимаю.

Автор - Olena
Дата добавления - 10.11.2022 в 10:48
Апострофф Дата: Четверг, 10.11.2022, 12:37 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация: 122 ±
Замечаний: 0% ±

Excel 1997
Olena, любую переменную, тем более объектную, нужно инициализировать.
Сделать это можно как при каждом открытии формы, (как у Вас)
так и единожды, при открытии файла например
[vba]
Код
Private Sub Workbook_Open()
Set ASD = [ZIC]
End Sub
[/vba]
Тут правда могут быть проблемы с аварийным завершением по END.
 
Ответить
СообщениеOlena, любую переменную, тем более объектную, нужно инициализировать.
Сделать это можно как при каждом открытии формы, (как у Вас)
так и единожды, при открытии файла например
[vba]
Код
Private Sub Workbook_Open()
Set ASD = [ZIC]
End Sub
[/vba]
Тут правда могут быть проблемы с аварийным завершением по END.

Автор - Апострофф
Дата добавления - 10.11.2022 в 12:37
Olena Дата: Четверг, 10.11.2022, 13:05 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 1 ±
Замечаний: 20% ±

Цитата Апострофф, 10.11.2022 в 12:37, в сообщении № 2 ()
могут быть проблемы с аварийным завершением по END

Имеется ввиду если выполнится с ошибкой, то нужно перезапускать файл?
Я читала что если объявить переменную в модуле [vba]
Код
Publik ASD as Range
[/vba], то переменная как бі считывается при старте и помниться до самого закрытия файла. Вот этого и хочу добиться. Хотя я могла не так все понять
 
Ответить
Сообщение
Цитата Апострофф, 10.11.2022 в 12:37, в сообщении № 2 ()
могут быть проблемы с аварийным завершением по END

Имеется ввиду если выполнится с ошибкой, то нужно перезапускать файл?
Я читала что если объявить переменную в модуле [vba]
Код
Publik ASD as Range
[/vba], то переменная как бі считывается при старте и помниться до самого закрытия файла. Вот этого и хочу добиться. Хотя я могла не так все понять

Автор - Olena
Дата добавления - 10.11.2022 в 13:05
Gustav Дата: Четверг, 10.11.2022, 13:09 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2695
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Olena, из примера не совсем понятен смысл заведения переменной ASD. Именованный диапазон ZIC существует сам по себе, его не надо как-то специально инициализировать - открыл книгу, его содержащую, и пользуйся на здоровье в любом месте проекта:
[vba]
Код
ComboBox1.List = [ZIC].Value
[/vba]
Согласен, с таким синтаксисом не очень удобно оперировать - нельзя программно менять адресацию. Но есть же гораздо более комфортная форма с использованием имени диапазона в виде текста, вместо которого можно подставлять какую-нибудь текстовую переменную с релевантным содержанием:
[vba]
Код
ComboBox1.List = Range("ZIC").Value

strAddr = "ZIC"
ComboBox1.List = Range(strAddr).Value
[/vba]
Либо совсем пафосно:
[vba]
Код
ComboBox1.List = ThisWorkbook.Names("ZIC").RefersToRange.Value
[/vba]

Так что пример пока не рулит. Вы приведите пример с использованием глобальной переменной в разных аспектах/контекстах. Хотя бы в двух: в виде ссылки на диапазон, как сейчас, и еще какой-нибудь другой смысл придайте (например, расчет формульный, как Вы говорите).


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеOlena, из примера не совсем понятен смысл заведения переменной ASD. Именованный диапазон ZIC существует сам по себе, его не надо как-то специально инициализировать - открыл книгу, его содержащую, и пользуйся на здоровье в любом месте проекта:
[vba]
Код
ComboBox1.List = [ZIC].Value
[/vba]
Согласен, с таким синтаксисом не очень удобно оперировать - нельзя программно менять адресацию. Но есть же гораздо более комфортная форма с использованием имени диапазона в виде текста, вместо которого можно подставлять какую-нибудь текстовую переменную с релевантным содержанием:
[vba]
Код
ComboBox1.List = Range("ZIC").Value

strAddr = "ZIC"
ComboBox1.List = Range(strAddr).Value
[/vba]
Либо совсем пафосно:
[vba]
Код
ComboBox1.List = ThisWorkbook.Names("ZIC").RefersToRange.Value
[/vba]

Так что пример пока не рулит. Вы приведите пример с использованием глобальной переменной в разных аспектах/контекстах. Хотя бы в двух: в виде ссылки на диапазон, как сейчас, и еще какой-нибудь другой смысл придайте (например, расчет формульный, как Вы говорите).

Автор - Gustav
Дата добавления - 10.11.2022 в 13:09
Olena Дата: Четверг, 10.11.2022, 14:33 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 1 ±
Замечаний: 20% ±

Спасибо большое за консультацию
По поводу [vba]
Код
ComboBox1.List = [ZIC].Value
[/vba]
именно так и пишу), а в примере через переменную указала для простоты объяснения)
например, расчет формульный, как Вы говорите.

расчет обычный, пусть даже таков
Код
x=a*b

[vba]
Код

dim LRow as Long
a=textbox1
b=textbox2
LRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
cells(LRow ,12).value=x
[/vba]
т.е. у меня в больших случаях есть умножение, вычитание, и все эти расчеты я писала раньше в текстбоксах, но это не красиво. Буквально вот на днях, решила перемножить значения колонок листбокса и у меня получилось, но как вот с переменными такими быть. Что бы они всегда "висели" в памяти. Конечно я могу и пользую уже обращение к Sub, работает, но правильно ли это, думаю нет.
 
Ответить
СообщениеСпасибо большое за консультацию
По поводу [vba]
Код
ComboBox1.List = [ZIC].Value
[/vba]
именно так и пишу), а в примере через переменную указала для простоты объяснения)
например, расчет формульный, как Вы говорите.

расчет обычный, пусть даже таков
Код
x=a*b

[vba]
Код

dim LRow as Long
a=textbox1
b=textbox2
LRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
cells(LRow ,12).value=x
[/vba]
т.е. у меня в больших случаях есть умножение, вычитание, и все эти расчеты я писала раньше в текстбоксах, но это не красиво. Буквально вот на днях, решила перемножить значения колонок листбокса и у меня получилось, но как вот с переменными такими быть. Что бы они всегда "висели" в памяти. Конечно я могу и пользую уже обращение к Sub, работает, но правильно ли это, думаю нет.

Автор - Olena
Дата добавления - 10.11.2022 в 14:33
Gustav Дата: Четверг, 10.11.2022, 15:28 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2695
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
могу и пользую уже обращение к Sub, работает, но правильно ли это

Если правильно ухватываю вашу мысль, то нужна, скорее, не Sub, а Function, потому что Function умеет возвращать значение:
[vba]
Код
Function x(ByVal a As Double, ByVal b As Double) As Double
    x = a * b
End Function
[/vba]
И потом в вашем коде примерно так:
[vba]
Код
dim LRow as Long
a=textbox1
b=textbox2
LRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
cells(LRow ,12).value = x(a, b)
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
могу и пользую уже обращение к Sub, работает, но правильно ли это

Если правильно ухватываю вашу мысль, то нужна, скорее, не Sub, а Function, потому что Function умеет возвращать значение:
[vba]
Код
Function x(ByVal a As Double, ByVal b As Double) As Double
    x = a * b
End Function
[/vba]
И потом в вашем коде примерно так:
[vba]
Код
dim LRow as Long
a=textbox1
b=textbox2
LRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
cells(LRow ,12).value = x(a, b)
[/vba]

Автор - Gustav
Дата добавления - 10.11.2022 в 15:28
Olena Дата: Четверг, 10.11.2022, 15:51 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 1 ±
Замечаний: 20% ±

Очень вас прошу, объясните что это значит, простыми словами.
Читаю читаю и не пойму как это ВОЗВРАЩАТЬ ЗНАЧЕНИЕ
умеет возвращать значение

а почему именно
x(a, b)

а не просто х, ведь результат переменной уже прописан в функции? Видела это решение через запятую, но не пойму
 
Ответить
СообщениеОчень вас прошу, объясните что это значит, простыми словами.
Читаю читаю и не пойму как это ВОЗВРАЩАТЬ ЗНАЧЕНИЕ
умеет возвращать значение

а почему именно
x(a, b)

а не просто х, ведь результат переменной уже прописан в функции? Видела это решение через запятую, но не пойму

Автор - Olena
Дата добавления - 10.11.2022 в 15:51
Gustav Дата: Четверг, 10.11.2022, 16:01 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2695
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
объясните что это значит, простыми словами.
Читаю читаю и не пойму как это ВОЗВРАЩАТЬ ЗНАЧЕНИЕ

Так, понятно. Гуглите по строке: vba функции и процедуры


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
объясните что это значит, простыми словами.
Читаю читаю и не пойму как это ВОЗВРАЩАТЬ ЗНАЧЕНИЕ

Так, понятно. Гуглите по строке: vba функции и процедуры

Автор - Gustav
Дата добавления - 10.11.2022 в 16:01
Serge_007 Дата: Четверг, 10.11.2022, 16:45 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
как это ВОЗВРАЩАТЬ ЗНАЧЕНИЕ
Функция берет данные, обрабатывает их и ВОЗВРАЩАЕТ значение
Возвращенное значение - это то, что Вы видите в ячейке, в результате работы функции


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
как это ВОЗВРАЩАТЬ ЗНАЧЕНИЕ
Функция берет данные, обрабатывает их и ВОЗВРАЩАЕТ значение
Возвращенное значение - это то, что Вы видите в ячейке, в результате работы функции

Автор - Serge_007
Дата добавления - 10.11.2022 в 16:45
Olena Дата: Четверг, 10.11.2022, 17:57 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 1 ±
Замечаний: 20% ±

Возвращенное значение - это то, что Вы видите в ячейке, в результате работы функции

Поняла, результат)
Благодарю)
 
Ответить
Сообщение
Возвращенное значение - это то, что Вы видите в ячейке, в результате работы функции

Поняла, результат)
Благодарю)

Автор - Olena
Дата добавления - 10.11.2022 в 17:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объявление глобальных переменных (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!