预填充用户表单失败给出 "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"
会引发不匹配错误,就像您的代码会引发不匹配错误一样。
所以我有一个用户表单,它可以从 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"
会引发不匹配错误,就像您的代码会引发不匹配错误一样。