首页 > 解决方案 > Excel VBA - 复制粘贴选项卡导致错误

问题描述

我正在编写一个宏来在文件中创建一个新选项卡,命名它,然后从现有模板选项卡中复制它。这样做时,会出现一个弹出框,搜索标题为 "Update values: wbname.xlsm" 的文件,然后我必须取消该文件。我不确定为什么会发生此错误(尽管该选项卡使用许多间接公式,因为它的价值),但如果有说明如何防止此弹出框,或如何将其关闭到代码中,那d 会很有帮助。

此外,我添加了第二个复制粘贴部分,因为最初没有通过列宽,但这也会导致运行时错误 1004 说“所有合并的单元格需要具有相同的大小。如果有更好的方法来复制这个,我会很感激,但否则我想我会做“下一个错误恢复”。

这是代码:

TabName = InputBox("Please enter your testing date?") 
ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)).Name = TabName
Sheets("Template").Range("A1:BZ300").Copy Destination:=Sheets(TabName).Range("A1")
Sheets("Template").Range("A1:BZ300").Copy
With Sheets(TabName).Range("A1")
    .PasteSpecial xlPasteColumnWidths
    .PasteSpecial xlPasteValues, , False, False
    .PasteSpecial xlPasteFormats, , False, False
    .Cells(1).Select
    Application.CutCopyMode = False
End With
Calculate

标签: excelvbacopy-paste

解决方案


我将假设 A1:BZ300 是模板工作表的整个使用范围。在这种情况下,只需复制整个模板工作表并将公式解析为其值。

您可以在操作期间使用 UpdateLinks = xlUpdateLinksNever 暂时挂起。

Dim tabName As String, oldUL As Long

tabName = InputBox("Please enter your testing date?")

With ThisWorkbook
    oldUL = .UpdateLinks
    .UpdateLinks = xlUpdateLinksNever

    .Worksheets("template").Copy After:=.Worksheets(.Worksheets.Count)
    With .Worksheets(.Worksheets.Count)
        .Name = tabName
        .UsedRange.Cells = .UsedRange.Cells.Value
        .Cells(1).Select
    End With

    .UpdateLinks = oldUL
End With

推荐阅读