0

我有一个在 Excel 2007 中正常工作的 VBA 宏,但在更新到 2010 后它会引发错误。宏基本上将原始数据从一张纸复制到多张纸上。抛出的错误是错误 6:溢出。引发错误的行是 Dim

y As Integer
y = Worksheets("Raw Data").Range("A2").End(xlDown).Row

我最初认为可以将其更改为 long 并且它将消除溢出错误。好吧,我猜它杀死了错误,但它也输出了非常错误的结果,然后意识到溢出错误甚至没有意义……只有 973 行。

然后我想好吧也许我试试这个

Cells(Rows.Count,"A").End(xlUp).Offset(1,0).Select

现在它在后面的行上抛出“对象'_global'的运行时错误'1004'方法'范围'失败”。

下面是完整代码的一部分。我确信它甚至可能是溢出错误?任何帮助表示赞赏。

Dim y As Integer
'y = Worksheets("Raw Data").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Select
y = Worksheets("Raw Data").Range("A2").End(xlDown).Row

Range("B1:U" & y).Select
Selection.Copy
Sheets("Yellow Suppliers").Select
Range("B2").Select
ActiveSheet.Paste
Columns("C:E").Select
Selection.Delete Shift:=xlToLeft
Columns("P:Q").Select
Selection.Delete Shift:=xlToLeft

Columns("A").ColumnWidth = 2.14
Columns("B").ColumnWidth = 43.43
Columns("C").ColumnWidth = 12.14
Columns("D:O").ColumnWidth = 8
Columns("P").ColumnWidth = 10.14

Rows("1").RowHeight = 15
Rows("2:" & y).RowHeight = 30

Range("B3:B22").Select
Selection.Font.Bold = True
4

2 回答 2

0

VBA 中的整数是 16 位有符号数字,这意味着它们可以取的最大值是 32767。电子表格中的行数可能比新 Excel 版本中的行数多得多。

您需要使用 long 而不是整数。long 是 32 位有符号的;足够大。

所以Dim y As Integer改为Dim y as Long

事实上,我很惊讶它在 Excel 2003 中工作,因为如果我没记错的话,它有 65536 行。但是无论如何请尝试我的建议,因为您的代码绝对不正确。

于 2013-05-22T17:59:15.113 回答
0

尝试摆脱任何SelectSelection在您的代码中。此外,确认y确实确实评估了 的预期值973

Sub Macro2()
Dim rngY as Range '## a variable to calculate the size of rows used in Column A'
Dim y As Integer

With Worksheets("Raw Data")
    Set rng = .Range("A2").Resize( _
        Application.WorksheetFunction.CountA(.Range("A:A")))
End With
    y = rngY(rngY.Rows.Count).Row

    Range("B1:U" & y).Copy Destination:= _
        Sheets("Yellow Suppliers").Range("B2")

    Columns("C:E").Delete Shift:=xlToLeft
    Columns("P:Q").Delete Shift:=xlToLeft

    Columns("A").ColumnWidth = 2.14
    Columns("B").ColumnWidth = 43.43
    Columns("C").ColumnWidth = 12.14
    Columns("D:O").ColumnWidth = 8
    Columns("P").ColumnWidth = 10.14

    Rows("1").RowHeight = 15
    Rows("2:" & y).RowHeight = 30

    Range("B3:B22").Font.Bold = True
End Sub
于 2013-05-22T16:31:11.757 回答