变体数据类型依赖

时间:2013-09-22 10:12:38

标签: vba variant

我在我的小型VBA应用程序中使用变量数据类型在同一函数下使用字符串和整数数据。但是,只有我的整数计算似乎有效,字符串相关的部分只给出#value!错误。

在我的应用程序中,我在同一函数下使用字符串和整数,将单个变量定义为variant。采取步骤在“”中指定字符串。

如果我在使用变体数据类型时需要区分字符串和int之间的任何其他方法,有人可以建议我吗?

我在这里分享我的应用程序以供参考,因为由于很多依赖项我无法复制这段代码。 (表:预测) VBA_App

1 个答案:

答案 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
...

表格赔率如下:

enter image description here

投注类型搜索:

bettype = Application.WorksheetFunction.VLookup(oddsId, odds.DataBodyRange, 3, False)
  • oddsId - 13
  • odds.DataBodyRange $ A $ 3:$ BT $ 47
  • bettype = 13

您按oddsIdVLookup搜索oddsId的第一列中的odds.DataBodyRange进行搜索 - 它是A列,但是在A列中您有TransId。

enter image description here

所以你的fcOption变量的bettype不正确。