vba存储要从非活动窗口粘贴的值

时间:2017-03-08 20:49:36

标签: excel vba excel-vba

我有两本工作簿。我自动将代码设置为设置不同的过滤器,然后测量wb2中的小计,然后取出该值并将其粘贴到wb1中的8x11表中,但是我需要花费很长时间才能使用。

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

我知道最好尝试不使用ActivateSelect,所以我认为如果我执行下面的代码会更快,它会更快。问题是它不能正确存储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 个答案:

答案 0 :(得分: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