我在我的小型VBA应用程序中使用变量数据类型在同一函数下使用字符串和整数数据。但是,只有我的整数计算似乎有效,字符串相关的部分只给出#value!错误。
在我的应用程序中,我在同一函数下使用字符串和整数,将单个变量定义为variant。采取步骤在“”中指定字符串。
如果我在使用变体数据类型时需要区分字符串和int之间的任何其他方法,有人可以建议我吗?
我在这里分享我的应用程序以供参考,因为由于很多依赖项我无法复制这段代码。 (表:预测) VBA_App
答案 0 :(得分:2)
如果我理解正确,你传递一个数值以2种格式 - 整数和字符串。当然,您可以使用variant,在使用此值之前,请检查它:
IsNumeric(yourVariant) gives you True or False:
IsNumeric("222") - True
IsNumeric(222) - True
IsNumeric("222abc") - False
之后确保您可以将Variant转换为整数(http://msdn.microsoft.com/en-us/library/s2dy91zy.aspx): CINT(yourVariant)
if IsNumeric(yourVariant) then
someIntVariable = CInt(yourVariant)
else
MsgBox "bla bla bla"
EndIf
我查看了一些代码,您可以使用Select Case Statement(http://msdn.microsoft.com/en-us/library/cy37t14y.aspx)或保留If-Else-If。评论中的讨论有助于您选择。
如果我的答案不正确,请提供更具体的代码。我发现很难理解你的申请会发生什么。
例如,我尝试从单元格E68,工作表预测中逐步分析代码运行函数fcComm
。
到达下一个功能setFcResult
:
Function setFcResult(bettype As String, fcOption)
' bettype = "FT.OU"
' fcOption = "HF.HL"
setFcResult = True
bettype = UCase(bettype)
fcOption = UCase(fcOption)
If bettype = "FT.OU" Then
If fcOption >= 0 Then ' you compare "HF.HL" with 0. It returns true. You can verify this by yourself.
hfs = 5
afs = fcOption - 5 ' here you perform "HF.HL" - 5. It returns error and function terminates.
Else
setFcResult = False
End If
ElseIf bettype = "HT.OU" Then
...
表格赔率如下:
投注类型搜索:
bettype = Application.WorksheetFunction.VLookup(oddsId, odds.DataBodyRange, 3, False)
您按oddsId
,VLookup
搜索oddsId
的第一列中的odds.DataBodyRange
进行搜索 - 它是A列,但是在A列中您有TransId。
所以你的fcOption变量的bettype不正确。