Ссылка на глобальную переменную - MS Access - PullRequest
2 голосов
/ 16 июля 2010

Я пытаюсь передать имя глобальной переменной подпрограмме и хотел бы знать, как ссылаться на нее. Например, я мог бы сделать следующее с помощью элемента управления:

Private Sub passCtrlName(ctlName as String)
Me.Controls(ctlName) = "Whatever"
End Sub

Edit:

Например

Public imGlobVar As String
Public Sub passGlobVar(frm as Form, ctlName as String, globVar as String)
frm.Controls(ctlName) = globVar
End sub

И назовите это как Частный Sub imaButton_Click () imGlobVar = "что-то" Вызовите passGlobVar (Me, txtBox1, imGlobVar) Конец суб

2-е редактирование:

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

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

Заполнение текстовых полей нормально и работает. Я использую глобальные переменные для улучшения юзабилити (хотя и немного). Пользователь может добавлять новые данные, и если он установит флажок «сделать так же, как контакт», введенные данные сохраняются в глобальных переменных, по одному для каждого элемента управления.

Если пользователь допустил ошибку, установив флажок, он не потерял это значение и, сняв флажок, введенные значения будут возвращены. Я надеялся создать подпрограмму, в которой я мог бы передать имя глобальной переменной и элемент управления и вызывать эту подпрограмму, а не записывать ее для каждого элемента управления.

У меня такое чувство, что я могу использовать неправильную технику для достижения своих целей. Но, отвечая на мой первоначальный вопрос, кажется, что вы не можете передавать глобальные переменные подпрограммам так, как я хотел.

Ответы [ 4 ]

2 голосов
/ 16 июля 2010

Вам не нужно передавать глобальные переменные, вы можете просто ссылаться на них по имени.Обратите внимание, что глобальные переменные сбрасываются при возникновении необработанной ошибки.

В http://msdn.microsoft.com/en-us/library/dd897495(office.12).aspx вы найдете раздел, посвященный области действия и времени жизни переменных и констант.

В модуле:

Option Explicit 
Public glbVarName As String
Const MyConstant=123

Sub InitVar
   glbVarName="Something"
End Sub

Любой другой модуль, включая модуль класса формы:

Sub SomeSub
    MsgBox glbVarName
    SomeVar=2+MyConstant
End Sub
1 голос
/ 18 июля 2010

Вы можете сохранить значения из ваших элементов управления в объекте Dictionary, используя имена элементов управления в качестве ключей словаря.Затем вы можете получить значение для каждого элемента управления на основе имени элемента управления.

Option Compare Database
Option Explicit

Const cstrMyControls As String = "Text0,Text2,Text4,Text6"
Dim objDict As Object

Private Sub chkToggle_Click()
    If Me.chkToggle = True Then
        Call SaveValues
    Else
        Call RestoreValues
    End If
End Sub

Private Sub SaveValues()
    Dim varControls As Variant
    Dim i As Long

    Set objDict = Nothing 'discard previous saved values '
    Set objDict = CreateObject("Scripting.Dictionary")
    varControls = Split(cstrMyControls, ",")
    For i = 0 To UBound(varControls)
        objDict.Add varControls(i), Me.Controls(varControls(i)).Value
    Next i
End Sub

Private Sub RestoreValues()
    Dim varControls As Variant
    Dim i As Long
    If objDict Is Nothing Then
        'MsgBox "No values to restore." '
    Else
        varControls = objDict.keys()
        For i = 0 To UBound(varControls)
            Me.Controls(varControls(i)).Value = objDict(varControls(i))
        Next i
    End If
End Sub
1 голос
/ 16 июля 2010

Если вы спрашиваете, можете ли вы динамически ссылаться на глобальные переменные, используя строку, содержащую имя переменной, ответ - нет.Вы можете использовать один глобальный массив и передать индекс, который позволит вам динамически ссылаться на элемент массива.

[Редактировать]
В ответ на пояснения ввопрос: вы можете просто сохранить значение каждого элемента управления в свойстве Tag, когда пользователь установит флажок.Затем, если пользователь снимает флажок, вы можете просто зациклить элементы управления и присвоить значение от Tag обратно до Value элемента управления.

0 голосов
/ 15 августа 2010

Я использую дополнительное поле в таблице - отмена имени - конечно, логическое - когда я не уверен, будет ли содержимое полей действительным, я установил его в true. Если это поле будет истинным к концу - тогда я уберу (это может быть вся запись или несколько полей конечно). Очень просто.

...