如何在vba中执行全局字符串数组?

时间:2017-05-31 13:40:37

标签: vba

我正在进行访问,我需要将字符串从一个表单发送到另一个表单,因此我想使用字符串(),但应用程序并不需要它。

有什么建议吗?

更新

我有一个带有2个文本框的表单,每个文本框将采用相同语法的数据,如textbox1:" JOHN" textbox2:" DAVID" 我有并为每个文本框添加按钮,这些文本框存储不同数组中的每个值。 添加按钮检查每个文本框的值是否存在于2个不同的表中,table1用于textbox1,table2用于textbox2。 如果它存在,我需要保留它们直到用户按下加载第二个表单的其他按钮。 用户可以在每个文本框中设置无限数量的值,方法是在设置新值时按add。

当我加载第二个表单时,我需要保留每个表中存在的值,但是要分开加载2个子表单,根据每个值加载一些数据。

一切正常,除非我不知道如何将2个数组从表单1传递到表单2,数组1的值为textbox1,数组2的值为textbox2

1 个答案:

答案 0 :(得分:0)

如果需要在表单加载时传递它,可以将值连接到单个字符串并将其传递给.OpenArgs

在另一个表单的load事件中,您可以拆分字符串并创建一个数组。

DoCmd.OpenForm "FormName", acNormal, , , acFormPropertySettings, acWindowNormal, "String1;String2;String3;String4"

'...

Private Sub Form_Load()

    Dim arr As Variant
    With Me
        If Not IsNull(.OpenArgs) Then
            arr = Split(.OpenArgs, ";")
        End If
    End With
End Sub

更新1:

您可以像这样构建.OpenArgs字符串:

dim oneString as String

With Me
    oneString = .YourtextBoxName1.Value & ";" & .YourtextBoxName2.Value 'etc...
End With

DoCmd.OpenForm "FormName", acNormal, , , acFormPropertySettings, acWindowNormal, oneString

更新2:

将其放入标准模块:

Private mArrValues() As Variant

'ArrayValues
Public Property Get ArrayValues() As Variant
    ArrayValues = mArrValues()
End Property

'Add value to array
Public Sub AddToArrayValues(ByVal index As Integer, value As String)
    ReDim Preserve mArrValues(0 To index)
    mArrValues(index) = value
End Sub

'Erase
Public Sub EraseArrayValues()
    Erase mArrValues
End Sub

您可以像这样向数组添加值:

Module1.AddToArrayValues 0, "Thomas"
Module1.AddToArrayValues 1, "Henry"
Module1.AddToArrayValues 2, "Bob"

您可以按索引检索值:

Dim i As Integer
For i = LBound(Module1.ArrayValues) To UBound(Module1.ArrayValues)
    Debug.Print Module1.ArrayValues(i)
Next i

'Thomas
'Henry
'Bob

忘记在重新填充之前需要擦除阵列:

Module1.EraseArrayValues