【发布时间】:2015-06-01 22:04:46
【问题描述】:
我是 Excel Vba 的新手,想知道是否有人可以帮助我弄清楚如何有效地编写此代码。
我正在尝试使用 Else-if 语句比较值,但在运行宏时不断收到不匹配错误。这是我目前所拥有的:
Dim score1 As Variant, result1 As Variant
score1 = Range("B24").value
Sheets("Answers").Range("P1") = VarType(score1)
If VarType(score1) = 0 Then
result1 = "Error"
msg1 = " INPUT A VALUE"
ElseIf score1 > (((Range("I24").value - Range("H24").value) * 0.2) + ((Range("H24").value + Range("I24").value) / 2)) Then
result1 = score1
msg1 = " Adjust the Left Flank of fH_Beta"
ElseIf score1 < (((Range("I24").value - Range("H24").value) * 0.2) - ((Range("H24").value + Range("I24").value) / 2)) Then
result1 = score1
msg1 = " Adjust the Left Flank of fH_Beta"
Else
result1 = "N/A"
msg1 = " No action required"
End If
Sheets("Answers").Range("F11").value = result1
当我将两条 Elseif 行从 > 2.3 和
顺便说一句,如果单元格为空,则第一行(IF 行)应该保存错误消息。我认为该错误与我将变量定义为“Double”类型有关,但我找不到修复它的方法(我还尝试将变量保存为字符串并将每个 .value 更改为 .Text)。
任何帮助将不胜感激。谢谢...
****更新:上面的代码现在是我拥有的当前代码。此代码中的公式应该采用 I24 和 H24(-7.7 和 2.3)中的值,并给出 -0.7 的上公差(与其中的 + 一致)和 -4.7 的下公差(与其中的 - 一致) ) 并使用这些容差来评估用户的输入 (B24)。
如果单元格留空,代码将运行第一个 IF 行并返回 msg1 值“INPUT A VALUE”。如果用户输入的数字超出公差,则代码应给出 msg1 值“调整 fH_Beta 的左侧”。如果这两个条件都不满足,则输入应在容差范围内,并且 msg1 值应为“无需操作”。
我的问题是,无论我在 B24 中输入什么值(甚至是公差值),我都会得到一个 msg1 值“调整 fH_Beta 的左侧”,我不知道为什么。如果我需要进一步澄清,请告诉我。
谢谢
【问题讨论】:
-
您不能像在公式中那样在 VBA 中使用范围引用。例如,您需要:
Range("I24").Value - Range("H24").Value而不是I24 - H24。 -
感谢 Rory,我按照您的说明输入了所有值,并按照 Bathsheba 的说明将变量更改为变体,现在我的代码运行没有错误。
-
对不起,我没有说完。但是,代码仍然无法正常工作(即我将在 B24 中输入一个介于 2.3 和 -7.7 之间的数字(这应该默认为代码的 Else 行),但我的输出仍然返回 msg1 语句在 Elseif 行下找到。
-
请更新问题以反映修改后的代码,以及当前发生的不应该发生的事情以及应该发生的事情。 (举例说明有问题的值可能会有所帮助)
-
好的,Rory,我已将问题更新为当前状态。如果这不能帮助澄清,请告诉我。