Excel 运行时错误13。Userform不接受空值

Excel 运行时错误13。Userform不接受空值,excel,vba,Excel,Vba,我正在尝试向名为calcform的用户表单输入单元格值,并从中输入单元格值。执行此操作时,如果值为空,run命令将给出一个错误。除了为每个值提供条件语句外,还有什么其他可能性 Private Sub-cancalc\u Click() 使用ActiveWorkbook.Worksheets(“Sysbal”) .激活 .Range(“C1”).Value=calcform.customercan.Text .Range(“C2”).Value=calcform.phonecan.Text .Ra

我正在尝试向名为
calcform
的用户表单输入单元格值,并从中输入单元格值。执行此操作时,如果值为空,run命令将给出一个错误。除了为每个值提供条件语句外,还有什么其他可能性

Private Sub-cancalc\u Click()
使用ActiveWorkbook.Worksheets(“Sysbal”)
.激活
.Range(“C1”).Value=calcform.customercan.Text
.Range(“C2”).Value=calcform.phonecan.Text
.Range(“C3”).Value=calcform.faxcan.Text
.Range(“C4”).Value=calcform.attentioncan.Text
calcform.fromcan.Text=“-”
calcform.phonecanme.Text=“-”
calcform.faxcanme.Text=“-”
.Range(“L17”).Value=CLng(calcform.condtempcan.Text)
.Range(“L18”).Value=CLng(calcform.subcoolingcan.Text)
.Range(“L19”).Value=CLng(calcform.entfluidcan.Text)
.Range(“L20”).Value=CLng(calcform.btuhtdcan.Text)
.Range(“L33”).Value=CLng(calcform.dischargecan.Text)
.Range(“L34”).Value=CLng(calcform.suctioncan.Text)
.Range(“E9”).Value=calcform.modelcan.Text
以
ActiveWorkbook.RefreshAll
使用ActiveWorkbook.Worksheets(“Sysbal”)
.激活
Application.ScreenUpdating=True
calcform.facevelocitycan.Caption=CStr(圆形(.Range(“E23”).值,0))
calcform.relativehumiditycan.Caption=CStr(整数(.Range(“E26”).值,2))
calcform.subcoulingareacan.Text=CStr(圆形(.Range(“E28”).值,0))
calcform.refpredropcan.Caption=CStr(圆形(.Range(“E31”)。值,0))
calcform.airrictioncan.Caption=CStr(圆形(.Range(“E32”).值,0))
calcform.subcoolcan.Caption=CStr(圆形(.Range(“E33”).值,0))
calcform.exitvelocity.Caption=CStr(圆形(.Range(“E34”).值,0))
以
端接头

问题是,如果文本框为空,则
calcform.entfluidcan.Text
返回空字符串
“”
。如果您试图使用
CLng
将空字符串转换为
Long
,则会出现错误

因此,您需要首先检查文本框中的值是否为数字:

If IsNumeric(calcform.entfluidcan.Text) Then 
    .Range("L19").Value = CLng(calcform.entfluidcan.Text)
Else
    .Range("L19").Value = 0
End If

下面的行也会出错

calcform.facevelocitycan.Caption = CStr(Round(.Range("E23").Value, 0))
如果
.Range(“E23”).value
中的值不是数字。如果是数字,请先检查

If IsNumeric(.Range("E23").Value) Then 
    calcform.facevelocitycan.Caption = CStr(Round(.Range("E23").Value, 0))
Else
    calcform.facevelocitycan.Caption = "NaN"
End If

将其与函数一起使用的示例:

Public Function ConvertToLong(ByVal InputValue As Variant) As Long
    ConvertToLong = 0 'default if it cannot be converted

    If IsNumeric(InputValue) Then 
        ConvertToLong = CLng(InputValue)
    End If
End Function
或者

Public Function ConvertToLong(ByVal InputValue As Variant) As Long
    ConvertToLong = 0 'default if it cannot be converted
    On Error Resume Next 'let it try to convert if it errors it will stay default
    ConvertToLong = CLng(InputValue)
    On Error Goto 0
End Function
然后像这样使用它:

.Range("L19").Value = ConvertToLong(calcform.entfluidcan.Text)

单元格值为,但可以为空。哪一行导致错误?@GSerg Yes有时dichargecan.text可以为空,有时entfluid.text可以为空。这取决于计算。但是,excel应该接受空值。它接受空值。您在哪一行有错误?@GSerg我在第11行有错误(
.range(“L17”).value=CLang(calcform.condtempcan.Text)
),但我删除了CLng,现在在第23行出现了新的错误。(
calcform.facevelocity…
)谢谢您的回答。为所有条件编写条件语句的过程变得非常繁琐。这里的值只是一个巨大表单中其他值的一小部分。使用“过程”是答案吗?@user9909958使用函数而不是过程。请看我编辑的答案。太好了。非常感谢。