预填充用户表单失败给出 "type mismatch" 错误

Prepopulating userform failed gives "type mismatch" error

所以我有一个用户表单,它可以从 excel sheet 获取信息并预填充用户表单或将用户表单信息输出回 excel sheet。从 excel 数据预填充用户窗体时出现问题。

如上图所示,它是用户窗体本身,在单击“预填充”选项后,我收到 Run-time 错误“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

上图是在 excel 上的样子,其中用户输入字段,最后一个字段是一个下拉列表,用于从链接到代码段的三个选项中选择 1如上所示的用户表单。

所以我想知道要消除这个错误,我是否必须为范围分配某种变量?

在这种情况下最好(为了易读性 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" 会引发不匹配错误,就像您的代码会引发不匹配错误一样。