Страницы: 1
RSS
Как присвоить значение глобальной переменной вне процедуры, функции
 
Добрый день
Объявил глобальную переменную в начале модуля, потом создал отдельную процедуру с присвоением значения переменной = значение ячейки
Столкнулся с тем, что каждый раз изменив значение ячейки - вызываю процедуру присвоения ей нового значения. Возможно ли избежать этого, чтобы значение переменной обновлялось каждый раз, когда обновляется ячейка, без дополнительной процедуры. На данный момент это выглядит так
Код
Option Explicit
Private i As String

Sub VarSetting ()
i = Workbooks("Склад.xlsm").Worksheets("Parameters").Cells(2, 2).Value
End Sub
Не владею предметом глобальных переменных, констант... может что то не так называю, простите если что
 
В модуль листа
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(taret, Cells(2, 2).Value) Is Nothing Then
        i = Workbooks("Склад.xlsm").Worksheets("Parameters").Cells(2, 2).Value
    End If
End Sub
или вообще
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    i = Workbooks("Склад.xlsm").Worksheets("Parameters").Cells(2, 2).Value
End Sub
Изменено: Wiss - 06.09.2019 14:49:56
Я не волшебник, я только учусь.
 
Только переменную как Public объявите. Private видна только в модуле.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
И ещё есть идея... А если вместо переменной использовать функцию, которая будет возвращать значение нужной ячейки?!
Код
Function z() As Variant
    z = ThisWorkbook.Worksheets("Parameters").Cells(2, 2).Value
End Function

Sub console()
    Debug.Print (z)
End Sub
Я не волшебник, я только учусь.
 
Попробовал воспроизвести, нет такого. Может у вас изменяется значение глобальной переменной по событию на листе?
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, Проверил. Изменяется.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
а можно объявить переменную As Range и обращаться именно к ней и не париться по вопросу чего там в какой момент изменилось - всегда будет значение ячейки:
Код
Option Explicit
Public ri As Range
 
Sub VarSetting ()
Set ri = Workbooks("Склад.xlsm").Worksheets("Parameters").Cells(2, 2)
End Sub

Sub OneSSS
    msgbox ri.Value
    Workbooks("Склад.xlsm").Worksheets("Parameters").Cells(2, 2).Value = "Change cell value"
    msgbox ri.Value
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
спасибо всем за помощь
попробую все варианты, что лучше подойдет
Страницы: 1
Наверх