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