预填充用户窗体失败会出现“类型不匹配”错误

时间:2019-07-29 17:30:48

标签: excel vba userform

因此,我有一个用户窗体,该用户窗体可以从excel工作表中获取信息并预先填充用户窗体,也可以将用户窗体信息输出回excel工作表中。从Excel数据预填充Userform时发生了此问题。

enter image description here

如上图所示,它是用户窗体本身,单击“预填充”选项后,出现运行时错误“ 13”:键入不匹配。因此,当我对其进行调试时,它转到了下面的第5行,与代码的Prepopulate部分相对应。

    With Sheets("DoNotPrint - Setup")
    If .Range("H28").value = "Chief Process Safety" Then
        ToggleButton1 = True
     Else
     If .Range("H28").value = "Senior Process Safety" Or "Interm Process Safety" Or "" Then
        ToggleButton1 = False
    End If
    End If
End With

enter image description here

上面的图片是在excel上的外观,其中用户输入了字段,最后一个字段是一个下拉列表,从链接到Userform中代码段的三个选项中选择1,如上所示。

所以我想摆脱这个错误,我是否必须为该范围分配某种变量?

1 个答案:

答案 0 :(得分:3)

(为了便于阅读,IMO)在这种情况下最好使用Select Case开关:

With Sheets("DoNotPrint - Setup")
Select Case .Range("H28").Value
    Case "Chief Process Safety"
        ToggleButton1 = True
    Case "Senior Process Safety", "Interm Process Safety", ""
        ToggleButton1 = False
End Select
End With

或者,您需要正确构造布尔表达式:

If .Range("H28").value = "Senior Process Safety" Or _
   .Range("H28").value = "Interm Process Safety" Or _
   .Range("H28").value = "" Then

由于是当前构造的,因此您的If语句正在将布尔值与字符串进行比较,这会导致不匹配错误。分解如下:

If (.Range("H28").Value = "Senior Process Safety") Or "Interim Process Safety" Or "" Then

由于您无法比较这些类型,If True Or "foo"会引发不匹配错误,就像您的代码会引发不匹配错误一样。