3

ユーザーのユーザー名とパスワードを格納するために 2D 配列を使用しています。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もう 1 つの問題は、配列の最初のインデックスを取得しようとすることです。あなたもそれを試すことができます。実行時エラーが発生します(下付き文字が範囲外です)

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

代わりに、次のことを思いつきました。usernameまたはを区別するために、最初のインデックスを保持する必要がありますpassword。これはサイズ 1 になります (2 ではありません)。ユーザーを追加すると、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 に答える