3

我正在使用二维数组来存储用户的用户名和密码。users定义为全局字符串数组:

Dim users(9, 2) As String

如何将用户添加到该数组?一次设置用户名和密码。

4

3 回答 3

8

一旦您拥有Dim具有明确界限的数组用户,您就不能ReDim这样做。你可以试试这个,它不会编译(数组已经标注)

Dim users(9, 2) As String
ReDim Preserve users(10, 2) ' doesn't compile!

您将遇到的另一个问题是尝试ReDim Preserve数组的第一个索引。你也可以试试,你会得到运行时错误(下标超出范围)

Dim users() As String
ReDim Preserve users(0, 1)
ReDim Preserve users(1, 1) ' runtime error!

相反,我想出了以下内容。您需要保留第一个索引来区分usernameor password。这将是 1 号(不是 2 号)。随着您添加更多用户,第二个索引将增加:

Private Sub Form_Load()
    Dim users() As String
    ReDim users(1, 0)
    Add users, "name1", "pw1"
    Add users, "name2", "pw2"
End Sub

Private Sub Add(ByRef users() As String, username As String, password As String)
    If Not (users(0, 0) = vbNullString And users(1, 0) = vbNullString) Then
        ReDim Preserve users(1, UBound(users, 2) + 1)
    End If
    users(0, UBound(users, 2)) = username
    users(1, UBound(users, 2)) = password
End Sub

如果您不能交换用户名和密码,您可能需要查看不同的数据结构,例如集合,或具有用户名和密码字段的自定义类的数组。

于 2013-01-31T22:44:07.780 回答
4

创建包含所有字段的用户定义类型

Private Type UserData
  strName As String
  strPass As String
End Type

然后创建该用户定义类型的数组

Dim udtUser() As UserData
ReDim udtUser(9) As UserData
With udtUser(9)
  .strName = "captain hook"
  .strPass = "parrotname"
End With 'udtUser(9)
于 2013-02-04T15:04:44.143 回答
1

循环遍历用户并直接将值分配给数组:

Dim cntr As Integer
For cntr = 0 To UBound(cntr) - 1
    users(x, 0) = "username"
    users(x, 1) = "password"
Next cntr
于 2013-01-31T21:40:18.110 回答