我知道这里已经回答了类似的问题:
What is the maximum value for row and column Range offset in VBA/Excel?
但是,该错误似乎与Excel 2003中工作表中的行数有关。由于我运行的是Excel 2010(包含65,536行),因此我认为我的错误与我的工作表大小无关。 / p>
以下代码行给出了运行时错误'6'溢出:
Range("OutputStart").Offset(1 + (iCounter1 - 1) * iDataPoints * 26 + iCounter2 * iDataPoints, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
iCounter1是一个整数,其值为13 iDataPoints是一个整数,其值为103 icounter2是一个整数,其值为7
行偏移计算的结果是32,858,表示Integer数据类型问题。行偏移是否仅限于整数数据类型?如果是这样,有没有办法将该限制更改为Long(或其他数据类型)?
感谢您提供的任何帮助!
威尔
答案 0 :(得分:2)
不要使用整数:它们是16位有符号值;它们的范围是-32768到32767.这就是你得到溢出的原因。
请改用Long。
答案 1 :(得分:0)
Range.Offset方法不限于整数。
偏移量有两个参数,均为变体
Variant中的数字数据:
通常,数字Variant数据保留在其原始数据中 在Variant中输入。例如,如果您将一个Integer分配给 变体,后续操作将Variant视为整数。 但是,如果对Variant执行算术运算 包含字节,整数,长整数或单个,以及结果 超过原始数据类型的正常范围,结果是 在Variant中提升为下一个更大的数据类型。一个字节是 升级为Integer,Integer升级为Long,Long 并且Single被提升为Double。 Variant时发生错误 包含Currency,Decimal和Double值的变量超出它们的值 各自的范围。
答案 2 :(得分:0)
VB中的整数是16位。使用unsigned int;或者更理想的是,很长一段时间。
Range将可选变量作为参数,如果输入的是数据,则保留数值数据。
要将数字转换为长数字,只需将其包裹在CLng(yournumber)
中,或者如果您的数字变大,则将其转换为CDbl(yournum)
的双精度数。