因此,我有一个用户窗体,该用户窗体可以从excel工作表中获取信息并预先填充用户窗体,也可以将用户窗体信息输出回excel工作表中。从Excel数据预填充Userform时发生了此问题。
如上图所示,它是用户窗体本身,单击“预填充”选项后,出现运行时错误“ 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上的外观,其中用户输入了字段,最后一个字段是一个下拉列表,从链接到Userform中代码段的三个选项中选择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"
会引发不匹配错误,就像您的代码会引发不匹配错误一样。