Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Access Visual Basic:创建字符串数组以在需要时进行搜索_Arrays_String_Ms Access_Vba - Fatal编程技术网

Arrays Access Visual Basic:创建字符串数组以在需要时进行搜索

Arrays Access Visual Basic:创建字符串数组以在需要时进行搜索,arrays,string,ms-access,vba,Arrays,String,Ms Access,Vba,因此,我试图在MicrosoftAccessVisualBasic中创建一个字符串数组,该数组将保存一定数量的状态名称。我还将有一个表单,允许人们在上面做数据输入。如果他们从表单上所有状态的下拉列表中选择恰好位于该数组中的一个状态,我希望它激活一个msgbox,该msgbox将弹出并告诉他们一条特定消息 到目前为止,我所能找到的代码有点像这样: Dim State(3) As String Dim Str As String State(0) = "California" State(1) =

因此,我试图在MicrosoftAccessVisualBasic中创建一个字符串数组,该数组将保存一定数量的状态名称。我还将有一个表单,允许人们在上面做数据输入。如果他们从表单上所有状态的下拉列表中选择恰好位于该数组中的一个状态,我希望它激活一个msgbox,该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

基本上,我的主要问题是,现在的代码相当于如果输入的数据=此状态,或者如果它=此状态,或者如果它=此状态等等。所有这些都带有内联延续,那么就执行消息框。问题是,在accessvb中只能有效地有24个continuation,而我现在有超过25个状态需要检查。此外,我继承了这些乱七八糟的代码,无法完全将其丢弃并重写,因此我认为使用字符串数组可能是一个可行的修复方法。

不确定我是否理解得很好,但如果您试图制作简短版本以在
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

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

您拥有数据库和访问表单的功能,为什么不使用它们呢

在states表中添加一个
Yes/No
列,作为提示消息的标志

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

然后在组合框的
AfterUpdate()
事件中,执行以下操作

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

这假设州名称位于第一列(0)。

这是VBA代码吗?那么它与VB.NET无关。@Steve不确定是否有vba,但所有使用的语法都存在于VB.netNice one中!向上投票我没有想到使用一个额外的专栏原创想法我喜欢它!这似乎是最好的答案,我一开始甚至没有想过修改表。我最大的问题是,这是一个垃圾的生产数据输入数据库,由我不认识的人在不久前创建,我的老板几乎不让我做任何事情,因为她害怕一切都会崩溃。我肯定会研究这个选项,看看是否能让它发挥作用。它似乎真的很容易实现。再次感谢!:)添加列并大大简化代码很可能不会破坏任何东西@穆奇81