【问题标题】:Excel VBA "Overflow" Error on setting Range.Value设置 Range.Value 时 Excel VBA“溢出”错误
【发布时间】:2019-12-27 07:07:30
【问题描述】:

我有一个在打开 Excel 工作簿时运行的宏,它基本上从名为“当天”的选项卡中获取数据并将其移动到“前一天”,然后从另一个工作簿中获取数据并将其粘贴到当天(实际上使用 range.value 而不是复制/粘贴)。几天内多次测试一切正常。但是,现在它在代码的 Range.Value 部分引发溢出错误。这绝对不是大小问题,因为代码是:

PrevDay.Range("A1:Q" & ScoreCurRows).Value = CurrDay.Range("A1:Q" & ScoreCurRows).Value

其中 ScoreCurRows 被声明为 Long 并从“当前日期”工作表中提取 UsedRange,PrevDay 被定义为 Sheets(“Previous Day”),而 CurrDay 被定义为 Sheets(“Current Day”)。它通常也是 20 行以下的数据,所以即使它是一个整数,这也不应该造成问题。

有谁知道为什么这会突然引发溢出错误以及是否有我应该寻找的东西?

【问题讨论】:

  • ScoreCurRows 究竟是如何定义的?
  • Debug.Print ScoreCurRows 崩溃时的值是多少?
  • 现在是 17.. set ScoreCurRows = Sheets("Current Day").UsedRange.Rows.Count...没有任何意义,即使它是整数
  • 你能告诉我这是什么意思吗? ActiveSheet.Range("A1:Q" & 17)
  • 您在源范围内是否有格式化为日期的单元格?或者任何有某种类型错误的单元格?尝试.Value2,而不是右侧的.Value

标签: vba excel runtime-error


【解决方案1】:

当 VBA 尝试将它们加载到变体数组中时,源范围中必须有一些值导致溢出

= CurrDay.Range("A1:Q" & ScoreCurRows).Value

例如,格式化为日期的单元格的值对于日期来说太大了。出于这个原因,请改用.Value2,这会将日期作为正常数字返回,而不会尝试转换它们。此外,尽管 SO 上的大多数帖子都不会遵守此规则,但始终 是众所周知的好习惯> 读取范围值时使用.Value2(分配时不一定)。

PrevDay.Range("A1:Q" & ScoreCurRows).Value = CurrDay.Range("A1:Q" & ScoreCurRows).Value2
'                                                                                 ^^^^^^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多