类型不匹配时传递的整数结果为整数变量类型

问题描述:

Dim codeStart As String 
codeStart = Evaluate("CELL(""address"",OFFSET(" & startRange & ",2,0,1,1))") 

Dim agentTotal As String 
agentTotal = Evaluate("CELL(""address"",INDEX(" & startRange & ":" & _ 
"$A$10000,MATCH(""    Total*""," & startRange & ":$A$10000,0)))") 

Dim numberOfCodes As String 
numberOfCodes = Evaluate("ROW(" & agentTotal & ")-ROW(" & codeStart & ")") 
MsgBox numberOfCodes 

前两个变量当与Msgbox类型不匹配时传递的整数结果为整数变量类型

我试图设置numberOfCodes到几个不同的变量类型,并把测试CInt正确传递作为字符串在Evaluate面前,但没有骰子..任何想法?

+0

'numberOfCodes'有什么值'postate'? – shahkalpesh

+0

在这个例子中,1.减去$ A $ 56 - $ A $ 55 –

+0

做一个'trim'并看看它是否可以用'val'转换成数字。即'msgbox(val(numberOfCodes))'。 – shahkalpesh

当您执行以下语句

Evaluate("ROW(" & agentTotal & ")-ROW(" & codeStart & ")") 

它返回一个Variant(这是什么Evaluate总是返回),但是,因为你使用ROW(可返回一个数组),它要么返回Variant/Variant(1 To 1)(如果只返回一行)或Variant/Variant(1 To x, 1 To 1)(如果返回x行)。

通常一个Variant可以转换为一个StringInteger(如果该值允许),但是,因为在这种情况下,它是一个Variant阵列,它不能被转换为单一值。

在你的情况,下面的代码会工作:

Dim numberOfCodes As Variant 
numberOfCodes = Evaluate("ROW(" & agentTotal & ")-ROW(" & codeStart & ")") 
MsgBox numberOfCodes(1) 

Dim numberOfCodes As Integer 
numberOfCodes = Evaluate("ROW(" & agentTotal & ")-ROW(" & codeStart & ")")(1) 
MsgBox numberOfCodes 

而是另辟蹊径本来简单的说:

Dim numberOfCodes As Long 
numberOfCodes = Range(agentTotal).Row - Range(codeStart).Row 

但是这种简化可能已经回归更进一步。比如你正在使用的代码Evaluate("CELL(""address"",OFFSET(" & startRange & ",2,0,1,1))")找到一个地址,但你是行号后真的,所以你可以离开了这一点,计算numberOfCodes

numberOfCodes = Range(agentTotal).Row - Range(startRange).Row - 2 

而且你还可以得到利用

摆脱 AgentTotal
numberOfCodes = Application.Match("    Total*", _ 
            Range(startRange, "$A$10000"),0) - 3 

它只计算从startRange到“Total”的行数(包含)并减去3(排除两个标题(?)和总数)。

+0

哇。非常有见地。非常感谢。 –

我只是要采取这些评估,并紧跟.Row并将它们传递给整数,只需从codeStartRow中减去agentTotalRow。现在完美运作。