2013-05-22 3 views
0

У меня есть макрос VBA, который корректно работал в Excel 2007, но после обновления до 2010 года он вызывает ошибки. Макрос в основном копирует необработанные данные с одного листа на несколько листов. Ошибка, вызванная ошибкой 6: переполнение. Линия, которая бросает ошибку тусклогоОшибка переполнения VBA после обновления с 2007 по 2010 год

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

Первоначально я думал, что КИ Ill изменить его на долгое время, и он будет убивать ошибку переполнения. Ну, я думаю, что он убил ошибку, но также выдал очень неправильные результаты, а затем добавил, что ошибка переполнения даже не имеет смысла ... всего 973 строки.

Я тогда подумал, хорошо, может быть плохо попробовать это вместо того, чтобы

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

Теперь он выдает «Ошибка выполнения„1004“метод„Range“объекта„_global“не удалось» на линии после.

Ниже приведена часть полного кода. Я полагаю, что это может быть ошибка переполнения? Любая помощь приветствуется.

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 
+0

Вы действительно уверены: 'y' оценивает на 973? –

+0

Нет, я не знаю, сколько строк находится в столбце A. Я не могу проверить, что он совершает, потому что ошибка переполнения происходит в строке, которая устанавливает значение. – woody

ответ

0

Попытка избавиться от любых Select или Selection в вашем коде. Также подтвердите, что 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 
+0

Я не был инициатором кода, Select используется сотни раз по всему макросу. Есть ли причина не использовать его? И я не уверен, как оценить y, поскольку ошибка переполнения происходит, когда она установлена. – woody

+1

Строка, перед тем как вы установите эту переменную 'y', выполните следующие действия:' Debug.Print Worksheets («Raw Data»). Range («A2»). End (xlDown) .Row' и посмотрите, что появляется в окне Immediate , –

+2

К другому вопросу, да, 'Select' действительно неуклюже, и в 99,9% случаев это не нужно. Это также делает ваш код менее разборчивым, чем если бы вы его избегали, или, например, ваша первая операция копирования/вставки требует 5 строк кода по сравнению с 1 строкой, в которую она может быть пересмотрена. [Здесь] (http://www.businessprogrammer.com/201105/power-excel-vba-secret-avoid-using-select/) - краткий обзор. Если у вас есть время на пересмотр вашего макроса, это может быть не очень сложно и в конечном итоге даст вам лучший код, который будет легче модифицировать в будущем. –

0

Целые в VBA являются 16-битным числом, которое означает, что наибольшее значение они могут принять это 32767. Там может быть много больше строк в таблице, чем в новых версиях Excel.

Вам нужно использовать длинное, а не целое число. Длинный 32-битный подписан; достаточно большого.

Меняет Dim y As Integer к Dim y as Long

На самом деле я удивлён он работал в Excel 2003, как, если мне не изменяет память, имеет 65536 строк. Но попробуйте мое предложение, так как ваш код определенно неверен.

Смежные вопросы