2015-09-09 2 views
1

Я пытаюсь скопировать значения из одного листа на другой и получить эту ошибку«Run Time Ошибка 9: индекс вне диапазона» при копировании

«Run Time Ошибка 9: индекс вне диапазона»

, когда я запускаю приведенный ниже код.

Sub updatemultiple() 
Workbooks.Open ("C:\Users\akpeko.zigah\Documents\EDC\DESTINATION.xlsm") 
Range("B2:F2").Copy 
'Application.DisplayAlerts = False 
ActiveWorkbook.Close 
ActiveSheet.Paste Destination:=Worksheets(“Sheet1”).Range("B2:F2") 
End Sub 

Любая помощь? Я застрял.

+0

какая линия ошибка? –

ответ

0

Существует ряд неотвеченных вопросов о родителях для ссылок на рабочую книгу/рабочие листы/ячейки, но если вы вставляете в ту же книгу, что и код, содержащий код, то что-то подобное должно работать.

Sub updatemultiple() 

    Workbooks.Open ("C:\Users\akpeko.zigah\Documents\EDC\DESTINATION.xlsm") 
    Range("B2:F2").Copy Destination:=THISWORKBOOK.Worksheets(“Sheet1”).Range("B2") 
    'Application.DisplayAlerts = False 
    ActiveWorkbook.Close False 

End Sub 

Проблемы возникают из-за того, как вы определяете текущий активный рабочий лист при открытии внешней книги. Если он был открыт, активный рабочий лист изменился, затем закрылся другим человеком или процессом, а затем, когда вы его открыли, он собирается скопировать неправильные ячейки. Если рабочий лист адресата не содержится в рабочей книге, содержащей код, то пункт назначения является неоднозначной ссылкой, которая зависит от текущего состояния среды приложения.

Краткое переписывание вашего кода (с некоторыми вставленными ссылками) может выглядеть следующим образом.

Sub updatemultiple() 
    Dim wb As Workbook 

    Set wb = Workbooks.Open("C:\Users\akpeko.zigah\Documents\EDC\DESTINATION.xlsm", ReadOnly:=True) 
    With wb.Worksheets("Sheet1") 
     .Range("B2:F2").Copy Destination:=ThisWorkbook.Worksheets(“Sheet1”).Range("B2:F2") 
     .Close SaveChanges:=False 
    End With 
    Set wb = Nothing 

End Sub 

Короче говоря, быть столь же явно, как вы можете путем определения ссылки рабочей книги, рабочий лист и ячейки для каждой стороны каждой операции. Опора на «то, что активно» может привести только к неприятностям.

0

Если я правильно понял ваш код, мне кажется, что у вас есть код в одном файле. Когда вы выполняете код, он открывает файл DESTINATION.xlsm, копирует ячейки, закрывает файл DESTINATION.xlsm, а затем вставляет данные в активный лист исходного файла, который содержит код.

Я не знаю, какие данные вы копируете, но при копировании (вручную, а не в коде) много данных из файла первенствовать, а затем закрыть его, вы получите предупреждение:

В буфере обмена имеется большой объем информации. Вы хотите, чтобы позже вставить эту информацию в другую программу?

По этой причине я рекомендую сначала вставить скопированные ячейки, а затем закрыть файл, из которого вы копируете.