【问题标题】:VBA paste sheets from array to new workbook as valuesVBA将工作表从数组粘贴到新工作簿作为值
【发布时间】:2014-11-29 20:21:56
【问题描述】:

我正在尝试编写这个小宏来复制存储在数组中的几张工作表并将它们作为值粘贴到新工作簿,维护工作表的名称和顺序。我找到了一些解决方案,但与我的情况不完全匹配。

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 函数的解决方案,但我不确定如何将它们与循环结合起来,我想这会使代码更干净?

提前致谢。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    我认为这可以解决您的问题。我不确定最后删除最后一张纸的部分。我不知道你想怎么处理:

    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
    

    【讨论】:

    • 谢谢,这几乎解决了所有问题;我可以在 workbook.add 方法中添加 xlWBATWorksheet,这样我就不必循环删除默认工作表。最后一件事-我希望在新工作簿的每个工作表中选择所有单元格,但是当我为每个循环添加 Cells.Selected 时,它仅适用于“ar1”。每个循环都需要另一个吗?
    • 我很好奇你为什么要选择所有单元格?是为了用户吗?如果不是,并且它是出于 VBA 目的,那么几乎可以肯定有更好的方法。如果你必须这样做,那么你需要Activate 每个so 然后做so.Cells.Select
    猜你喜欢
    • 2016-10-25
    • 2017-09-08
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多