使用VBA将工作表从一个WB复制到另一个WB而不打开目标WB

mou*_*mou 3 excel vba excel-vba

我是VBA的新手并尝试自动更新工作簿.我有一个源工作簿和目的地工作簿乙.两者都有一张名为推出摘要的表格.我希望用户在A中更新此工作表,然后单击应该运行我的宏的更新按钮.此宏应自动更新工作簿B中的工作表而不打开工作簿B.

我正在尝试此代码,但它不起作用,并给我一个错误:

Dim wkb1 As Workbook
Dim sht1 As Range
Dim wkb2 As Workbook
Dim sht2 As Range

Set wkb1 = ActiveWorkbook
Set wkb2 = Workbooks.Open("B.xlsx")
Set sht1 = wkb1.Worksheets("Roll Out Summary") <Getting error here>
Set sht2 = wkb2.Sheets("Roll Out Summary")

sht1.Cells.Select
Selection.Copy
Windows("B.xlsx").Activate
sht2.Cells.Select
Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
Run Code Online (Sandbox Code Playgroud)

L42*_*L42 8

sht1sht2应声明为Worksheet.至于更新工作簿而不打开它,可以完成,但需要采用不同的方法.为了使它看起来你没有打开工作簿,你可以打开ScreenUpdating/关闭.

试试这个:

Dim wkb1 As Workbook
Dim sht1 As Worksheet
Dim wkb2 As Workbook
Dim sht2 As Worksheet

Application.ScreenUpdating = False

Set wkb1 = ThisWorkbook
Set wkb2 = Workbooks.Open("B.xlsx")
Set sht1 = wkb1.Sheets("Roll Out Summary")
Set sht2 = wkb2.Sheets("Roll Out Summary")

sht1.Cells.Copy
sht2.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
wkb2.Close True

Application.ScreenUpdating = True
Run Code Online (Sandbox Code Playgroud)

  • @mou Np.很高兴它做到了.顺便说一句,请参阅[接受答案](http://stackoverflow.com/help/someone-answers)作为一种说法*谢谢*在SO中.[这里](http://stackoverflow.com/tour)也清楚地讨论了这个问题. (3认同)