簡體   English   中英

VBA將數組中的工作表作為值粘貼到新工作簿中

[英]VBA paste sheets from array to new workbook as values

我正在嘗試編寫這個小宏來復制存儲在數組中的幾張工作表,並將它們作為值粘貼到新工作簿中,以保持工作表的名稱和順序。 我找到了一些解決方案,但與我的情況不完全匹配。

Sub tryit()

Dim wo As Workbook, wn As Workbook
Dim so As Worksheet, sn As Worksheet
Dim MyArray As Variant

MyArray = Array("ar1", "ar2", "ar3")

Set wo = ActiveWorkbook
Set wn = Workbooks.Add

For Each so In wo.Worksheets(MyArray)
        Set sn = wn.Worksheets.Add
        sn.Name = so.Name
        so.Cells.Copy
        sn.[A1].PasteSpecial xlPasteValues
        sn.[A1].PasteSpecial xlPasteFormats
    Next so

wn.SaveAs Filename:=ThisWorkbook.Path & "\" & "Report"
wn.Close savechanges:=True

End Sub

結果問題:

  1. 我將新的工作表從數組添加到工作表1 2和3,如何替換它們而不是刪除它們?
  2. 添加工作表的順序相反(ark3,ark2,ark1)。

我已經看到了一些使用Lbound和Ubound函數的解決方案,但是我不確定如何將它們與循環結合使用,我想它將使代碼更簡潔?

提前致謝。

我認為這可以解決您的問題。 我不確定刪除最后一張紙的末尾部分。 我不知道您想如何處理:

Sub tryit()

Dim wo As Workbook, wn As Workbook
Dim so As Worksheet
Dim MyArray As Variant

MyArray = Array("ar1", "ar2", "ar3")

Set wo = ActiveWorkbook
Set wn = Workbooks.Add
'copy all worksheets at once
wo.Worksheets(MyArray).Copy before:=wn.Worksheets(1)

For Each so In wn.Worksheets
    'same effect as PasteSpecial>Values
    so.UsedRange.Value = so.UsedRange.Value
Next so

Application.DisplayAlerts = False
'delete last sheet, the default sheet in original workbook
'if there was more than one, need to adjust
wn.Worksheets(wn.Worksheets.Count).Delete
Application.DisplayAlerts = True
wn.SaveAs Filename:=ThisWorkbook.Path & "\" & "Report"
wn.Close savechanges:=True
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM