2015-03-12 4 views
0

Я собираюсь провести макрос, который откроет книгу с указанным путем и пропустит ее листы, которые имеют имена «Januari, Februari, Марс ", чтобы вычесть значение из C34. C34 имеет значение, записанное там каждый раз, поэтому оно не должно меняться. Однако я хочу, чтобы скопировать его на текущем листе, где первая цель должна быть в AA73, второй в AA74 и т.д. Мой кодСкопируйте значение из ячейки на листе в диапазон ячеек

Sub Test() 
    Dim myHeadings 
    Dim i As Long 
    Dim path As String 
    path = "C:\pathtofile\file.xlsx" 
    Dim currentWb As Workbook 
    Set currentWb = ActiveWorkbook 
    Dim openWb As Workbook 
    Set openWb = Workbooks.Open(path) 
    Dim openWs As Worksheet 

    myHeadings = Array("Januari", "Februari", "Mars") 

    For i = 0 To UBound(myHeadings) 
     Set openWs = openWb.Sheets("&i") 

     currentWb.Sheets("Indata").Range("AA73+Application.Match(i,Array,False)").Value = openWs.Range("C34").Value 

    Next i 
End Sub 

Однако компилятор говорит, что индекс находится вне диапазона в строке с

Set openWs = openWb.Sheets("&i") 

Здесь я пытался сделать «я», я, & я среди прочего, но не изменились. Также я попытался использовать «ThisWorkbook» вместо «ActiveWorkbook», но это тоже не помогло. Кто-нибудь имеет представление о том, как достичь этого более правильным образом?

EDIT: Адаптация к ответу от Дейва, он работает, чтобы импортировать листы. Однако я получаю сообщение об ошибке в:

currentWb.Sheets("Indata").Range("AA73+Application.Match(i,Array,False)").Value = openWs.Range("C34").Value 

Где получить Automation Error -2147221080 (800401a8) в указанном фрагменте кода.

+2

Я уверен, что первый лист в Excel является Лист1 и не Sheet0, так вам может потребоваться изменить свой код как «Установить openWs = openWb.Sheets (i + 1)» – PaulFrancis

+0

Аналогично, вы уже положили имена листов в массив, чтобы вы могли просто вызвать имя листа из массива в виде Set openWs = openWb.Sheets (myHeadings (i)) – Dave

+0

Имена листов - Januari, Februari и т. д. Таким образом, итерация с 0 будет первым элементом в массиве, который был бы Januari, как я понял. @Dave Спасибо! Это решило ошибку, но вызвало появление еще одного. Я редактировал OP. – Cenderze

ответ

1

Вы уже поставили свои имена листов в массив, так что вы можете просто позвонить имя листа из массива, как:

Set openWs = openWb.Sheets(myHeadings(i)) 
Смежные вопросы