Может ли макрос в одной рабочей книге вносить изменения в другую рабочую книгу? - PullRequest
3 голосов
/ 25 июля 2011

Я определил макрос в одном листе (internal.xls) как

Public Sub sheet2test()
   Workbooks.Open Filename:="external.xls"
   Windows("external.xls").Activate
   Sheets("Sheet3").Activate
   Range("A5").Value = 5

End Sub

Запустив этот код, откройте external.xls и активируйте его лист 3. Однако значение 5 помещается в internal.xls, а не external.xls. Как я могу гарантировать, что изменения будут внесены в другой лист?

Ответы [ 3 ]

7 голосов
/ 25 июля 2011

Я бы лучше использовал:

dim wb as workbook, sh as worksheet
set wb = workbooks.open("thatWorkbook.xls")
'Now you have a proper reference to the newly opened workbook !
set sh = wb.sheets("sheet3")
sh.range("a1") = "hello world"

Как утверждают другие, различные Activate инструкции здесь более неудобны, чем полезны.

6 голосов
/ 25 июля 2011

Вам не нужно делать всю эту активацию. Все, что он делает, это вызывает мигание экрана и задержки в обработке.

Public Sub sheet2test()
   Workbooks.Open Filename:="external.xls"
   Workbooks("external.xls").Sheets("Sheet3").Range("A5").Value = 5
End Sub
4 голосов
/ 25 июля 2011

Ответ Да.

Попробуйте следующий код, чтобы внести изменения в external.xls:

Public Sub sheet2test()
 Workbooks.Open Filename:="external.xls"
 Workbooks("external.xls").Activate
 ActiveWorkbook.Sheets("Sheet3").Activate
 Range("A5").Value = 5
End Sub

Я добавил ActiveWorkbook. в строку 4.

Это необходимо добавить для внесения изменений в текущую активную книгу (external.xls), а не в книгу, содержащую и выполняющую макрос (internal.xls)

...