【问题标题】:Run-time error '6' Overflow while comparing 2 files比较 2 个文件时出现运行时错误“6”溢出
【发布时间】:2017-05-08 23:29:00
【问题描述】:

我有下面的代码来比较两张纸之间的数据并突出显示差异。但它给了我一个

运行时错误'6'溢出

compareSheets过程中,同时执行if条件。

有人可以帮我解决这个问题吗?

Sub RunCompare()
    'Call the compareSheets routine
    Call compareSheets("Sheet1", "Sheet2")
End Sub


Sub compareSheets(Sheet1 As String, Sheet2 As String)  
    Dim mycell As Range
    Dim mydiffs As Integer

    For Each mycell In ActiveWorkbook.Worksheets("Sheet2").UsedRange
        If Not mycell.Value = ActiveWorkbook.Worksheets("Sheet1").Cells(mycell.Row, mycell.Column).Value Then
            mycell.Interior.Color = vbYellow
            mydiffs = mydiffs + 1
        End If
    Next

    MsgBox mydiffs & " differences found", vbInformation
End Sub

【问题讨论】:

  • 参见 Documentation.SO 上的 Integer data type。溢出错误意味着您正在突破该限制。解决方案是使用可以适合您尝试分配的值的类型。 ActiveWorkbook.Worksheets("Sheet2").UsedRange 中有多少个单元格?如果超过 32,767,Integer 将溢出。试过Long
  • mydiffs 增量上的哪一行?我
  • FWIW 还有其他问题:您的 CompareSheets 过程没有使用它的参数,这些参数很可能隐藏/隐藏了 Sheet1Sheet2 这些各自的全局范围对象变量ThisWorkbook 中的工作表,并且该评论完全没有说明代码没有说明的内容,应该删除。参数可以通过ByVal 传递,并且可以是Worksheet 类型而不是String,它们是工作表而不是工作表名称该过程并使其在ActiveWorkbook之外工作。

标签: vba excel


【解决方案1】:

您将 mydiffs 调暗为 integer,改为将其调暗为 long。发生的事情是数量超过了 32767。

另外,你的 sub 的一个问题(不会导致这个问题,但应该纠正)是你没有使用参数 Sheet1/2,而是使用字符串“Sheet1”/“Sheet2”,去掉下面的引号。

Sub compareSheets(Sheet1 As String, Sheet2 As String)  
    Dim mycell As Range
    Dim mydiffs As Long

    For Each mycell In ActiveWorkbook.Worksheets(Sheet2).UsedRange
        If Not mycell.Value = ActiveWorkbook.Worksheets(Sheet1).Cells(mycell.Row, mycell.Column).Value Then
            mycell.Interior.Color = vbYellow
            mydiffs = mydiffs + 1

        End If
    Next

    MsgBox mydiffs & " differences found", vbInformation
End Sub

【讨论】:

  • 我尝试进行上面建议的更改,将整数转换为 Long 并从工作表 anme 中删除引号,但它仍然在下面的行中抛出相同的错误( mycell value = nothing )。 If Not mycell.Value = ActiveWorkbook.Worksheets(Sheet1).Cells(mycell.Row, mycell.Column).Value 然后
  • 在探索其他选项之前,请用我的完全替换您的子(复制/粘贴),它在我的 Excel 上没有问题。
  • @Karthick 该单元格中的值是多少?
  • 谢谢我复制/粘贴了您提到的代码,但我仍然遇到同样的问题。仅供参考,昨天同一段代码运行良好,不知道是什么导致了这个问题。
  • 很好,这个问题现在已经解决了,我刚刚扫描了单元格,发现一些单元格的值为#####。我将这些值转换为数字,现在可以正常工作了。非常感谢马特。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多