访问Visual Basic:创建一个字符串数组,以便在需要时进行搜索

时间:2017-05-04 12:55:51

标签: arrays string ms-access access-vba

所以我试图在microsoft access visual basic中创建一个字符串数组,它将包含一定数量的州名。我还将有一个允许人们进行数据输入的表单。如果他们从表单上所有状态的下拉列表中选择恰好位于此数组中的状态之一,我希望它激活一个将弹出的msgbox并告诉他们特定的消息。

到目前为止,我能够找到的代码有点像这样:

Dim State(3) As String
Dim Str As String
State(0) = "California"
State(1) = "Florida"
State(2) = "New Hampshire"
State(3) = "Illinois"
For Each Str In State
  If State.Contains(Str) Then
    MsgBox("Found " & Str & " at index " & State.IndexOf(Str))
  End If
Next

基本上我的主要问题是,现在代码具有相当于输入数据=此状态或者如果它=此状态或者如果它=此状态等都具有内联延续,则执行msg框。给出的问题是你只能在访问vb中有效地拥有24个连续,现在我需要检查超过25个状态。此外,我继承了这一堆代码,我无法完全删除它并重写,所以我认为使用字符串数组可能是一个可行的修复。

2 个答案:

答案 0 :(得分:1)

硬编码状态列表是一个坏主意。

您可以使用数据库和Access表单的强大功能,为什么不使用它们?

在状态表中添加Yes/No列,以获取提示消息的标志。

将此列添加到(我假设的)组合框的行源中,其中用户选择状态,宽度为0,因此它是不可见的。

然后在组合框的AfterUpdate()事件中,你做

If Me.cboStates.Column(1) = True Then
    MsgBox "flag!"
End If

这假定状态名称在第一列(0)中。

答案 1 :(得分:0)

不确定我是否理解得很好但是如果您试图制作简短版本以在MsgBox中显示索引选择状态,那么您可以这样做:

Public Sub GetStates() As List(Of String)
    Dim CurrentStates As New List(Of String)
    For each result in your sql query like: "SELECT Name, From States"
        CurrentStates.Add(result)
    Next
End Sub

然后你可以这样:

Dim States As New List(Of String)
States = GetStates()
If States.Contains("UserInput") Then
    MsgBox("Index: " & States.IndexOf("UserInput")
Else
    MsgBox("State is Unknown")
End If