如何使Excel从两个子字符串动作中决定?

时间:2019-05-31 13:09:55

标签: vba excel-vba

例如,如果我已经使用InStr函数为Word文件分配了一些字符串搜索,并且又通过另一个InStr调用来打开某些ppt文件(使用超链接)。 当用户键入用户表单时,会发生这种情况。 所以我的问题是,如果用户一次输入两个关键字,如何使excel决定打开哪个文件。

Option Explicit

Private Sub CommandButton1_Click()

    If InStr(UCase(textbox1.Text), UCase("name of word file")) <> 0 Then
        'Code
    ElseIf InStr(UCase(textbox1.Text), UCase("name of ppt file")) <> 0 Then
        'Code
    Else
        'Code
    End If

End Sub

如果用户一次输入两个文件的名称,我如何使表单决定要打开哪个文件?

1 个答案:

答案 0 :(得分:0)

类似于其他人在评论中所说的话:

If InStr(sample_string, "a") Then
    Msgbox("A")

ElseIf InStr(sample_string, "b") Then
    Msgbox("B")

Else
    Msgbox("C")

End If

在上面的示例中:

  • 如果sample_string = "a",您将得到Msgbox("A")
  • 如果sample_string = "b",您将得到Msgbox("B")
  • 如果sample_string = "a and b"得到Msgbox("A")

在最后一种情况下,您得到Msgbox("A"),因为首先检查了条件InStr(sample_string, "a")。返回True后,它将运行相应的Msgbox("A")代码并跳至End If语句。 IF语句就是这样工作的。


要控制在sample_string = "a and b"时要加载哪个文件,您可以:

  1. 就像@David Zemens提到的那样,使用另一种形式的表单控件来限制用户可以执行的操作。组合框或单选按钮会很好。

  2. @JNEVILL的注释建议您可以将较高优先级的文件放在IF块上,而将较低优先级的文件放在ELSEIF块上。这会起作用。

  3. 我个人更喜欢通过在我的IF块中添加一个条件来显式地控制该特定情况。这是为了提高可读性,也是考虑所有可能组合的好练习:

If InStr(sample_string, "a") AND InStr(sample_string, "b") Then
    'Code to return higher-priority file
    'Or reject the user entry
    'Or whatever you like

ElseIf InStr(sample_string, "a") Then
    'Code to open file "a"

ElseIf InStr(sample_string, "b") Then
    'Code to open file "b"

Else
    'Code to handle if neither "a" or "b" was given

End If