vba хранит значение для вставки из неактивного окна

У меня есть две рабочие тетради. Я автоматизировал код для установки различных фильтров, а затем измерил промежуточный итог в wb2, затем взял это значение и вставил его в таблицу 8x11 в wb1, однако это занимает целую вечность, как я использую.

Windows("wb2name").Activate
Sheets("sheet2").Select
 ' do the filtering and copy subtotal value
 Windows("wb1name").Activate
 Sheets("sheet1").Range("A1").Paste 

Я знаю, что лучше попробовать и не использовать Activate а также Select поэтому я подумал, что будет быстрее, если я сделаю код ниже, он будет работать быстрее. Проблема в том, что он не хранит x= промежуточный итог должным образом. Как это исправить?

Dim wb1 As Workbook
Dim wb1sh As Worksheet

Set wb1 = ActiveWorkbook
Set wk1sh = wb1.Sheets("sheet1")
Set wb2 = "data file.xlsx"
Set wk2sh = wb1.Sheets("sheet1")

'Then I do the filter selecting wich works fine via:

x= wb2sh.Application.WorksheetFunction.Subtotal(3,Range("A1:A100")) 

wb1sh.Range("A1")=x

End Sub

1 ответ

Решение

Попробуйте это, ваш синтаксис был немного отключен, и я думаю, что вы ссылались на неправильные листы. Вы должны включить Option Explicit, который бы предупредил вас о неправильных именах переменных.

Dim wb1 As Workbook, wb2 as workbook
Dim wk1sh As Worksheet, wk2sh as worksheet, x

Set wb1 = ActiveWorkbook
Set wk1sh = wb1.Sheets("sheet1")
Set wb2 = workbooks("data file.xlsx")
Set wk2sh = wb2.Sheets("sheet1")

'Then I do the filter selecting wich works fine via:

x= Application.WorksheetFunction.Subtotal(3,wk2sh.Range("A1:A100")) 

wk1sh.Range("A1")=x

End Sub
Другие вопросы по тегам