Суть в следующем. При открытии книги объявляется 50 глобальных переменных (начальные значения), которые соответствуют названиям соседних столбцов и присваивается значение каждой из них. Допустим при изменении значения мне нужно найти эту переменную и сравнить с новым значением. То есть Range("A2").Value (к примеру) вернет значение "Переменная1". Дальше нужно найти эту объявленную переменную (то есть переменную с таким же названием, которое вернуло Range().Value) и найти ее значение, а потом сравнить их. Можно это как то сделать или нет?) Файл для примера прикладываю.
В таком виде - нельзя. Да и "50 глобальных переменных" - это неверный подход. Объявите массив. Можно найти номер элемента массива, равного заданному значению, это будет как бы "номер переменной". Да и прочитать диапазон в массив можно одним действием:
Код
Public Переменные()
Sub peremenn()
Переменные = Sheets("Лист1").Range("B2:B6").Value 'двумерный массив (1 to 5, 1 to 1)
'можно получить одномерный массив:
Переменные = Application.Transpose(Sheets("Лист1").Range("B2:B6").Value) 'массив (1 to 5)
End Sub
Казанский, разобрался, только вот он почему то сбрасывает через какое то время этот массив. Ну то есть допустим через несколько запусков он больше не видит этот массив из других модулей...
andrey062006 написал: тогда я вообще ничего не понимаю
Там в коде выше два массива, оба Переменные - так что название массива ни о чём не говорит, а вот из какгого из двух собираетесь выдирать - могли сказать.
Hugo, из первого, но с этим я уже разобрался) Только почему то через несколько запусков он больше не видит этот массив из других модулей..
Кстати, случайно не можете подсказать как обновить оттдельный элемент userform при изменении данных на листе. В коде листа попробовал написать функцию вызова Private sub из userform но не вышло.
Публичные переменные "слетают" при ошибках в работе кода, когда он останавливается. А форму можно перерисовать (Repaint) - если я правильно понял что нужно.