VBA If语句问题

时间:2016-03-04 15:31:06

标签: excel vba if-statement

我正在使用带有四个文本框的用户窗体,用户可以输入必须达到(总共四个输入)的数值,总数为1.

然后我将这些值与单元格值结合使用来执行计算。为了尝试阻止用户输入小于或大于1的累积值,我使用以下If语句在单击用户表单的“确定”按钮时执行。

但是,Then语句(显示MsgBox和exit sub)即使值为1,无论值是什么,都会发现If语句为真。有什么想法吗?

Private Sub OKButton_Click()
If DirectorBox.Value + SnrBox.Value + MngrBox.Value + ResearcherBox.Value <> 1 Then
    MsgBox "Values must amount to a total of 1"
    Exit Sub
End If
Sheets("Menu").Range("G13").Value = (Range("G9").Value * DirectorBox.Value) _
+ (Range("G10").Value * SnrBox.Value) + (Range("G11").Value * MngrBox.Value) _
+ (Range("G12").Value * ResearcherBox.Value)
Unload UserForm1
End Sub

1 个答案:

答案 0 :(得分:0)

文本框包含文本,而不仅仅是数字,因此Value属性的数据类型是一个字符串。

您对If行的测试是在进行字符串连接而不是数字加法,因此该值永远不能等于数字1。

您需要将文本框中数字的文本表示转换为实际数字。假设输入的值是小数,这应该有效:

Private Sub OKButton_Click()
dim checkVal As Double
If IsNumeric(DirectorBox.Value) Then checkVal = CDbl(DirectorBox.Value)
If IsNumeric(SnrBox.Value) Then checkVal = checkVal + CDbl(SnrBox.Value)
If IsNumeric(MngrBox.Value) Then checkVal = checkVal + CDbl(MngrBox.Value)
If IsNumeric(ResearcherBox.Value) Then checkVal = checkVal + CDbl(ResearcherBox.Value)
If checkVal <> 1# Then
    MsgBox "Values must amount to a total of 1"
    Exit Sub
End If
Sheets("Menu").Range("G13").Value = (Range("G9").Value * DirectorBox.Value) _
+ (Range("G10").Value * SnrBox.Value) + (Range("G11").Value * MngrBox.Value) _
+ (Range("G12").Value * ResearcherBox.Value)
Unload UserForm1
End Sub

注意:“1#”可确保文字“1”也是Double类型,与checkVal相同。否则,口译员会认为它是Integervba: what is 97.45 * 1# =?