类型不匹配时传递的整数结果为整数变量类型
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
面前,但没有骰子..任何想法?
当您执行以下语句
Evaluate("ROW(" & agentTotal & ")-ROW(" & codeStart & ")")
它返回一个Variant
(这是什么Evaluate
总是返回),但是,因为你使用ROW
(可返回一个数组),它要么返回Variant/Variant(1 To 1)
(如果只返回一行)或Variant/Variant(1 To x, 1 To 1)
(如果返回x行)。
通常一个Variant
可以转换为一个String
或Integer
(如果该值允许),但是,因为在这种情况下,它是一个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(排除两个标题(?)和总数)。
哇。非常有见地。非常感谢。 –
我只是要采取这些评估,并紧跟.Row并将它们传递给整数,只需从codeStartRow中减去agentTotalRow。现在完美运作。
'numberOfCodes'有什么值'postate'? – shahkalpesh
在这个例子中,1.减去$ A $ 56 - $ A $ 55 –
做一个'trim'并看看它是否可以用'val'转换成数字。即'msgbox(val(numberOfCodes))'。 – shahkalpesh