Excel Vba – 调用带有可变工作表名称的工作表

我一直在VBA编码一段时间,但这一个真的难倒我。

我正在创build一个为机器创build技术证书的工作簿。 我们有不同的模板,具体取决于机器types,我试图让我的代码从用户input中select正确的工作表,然后填充工作表。 仅供参考,这些模板表将被隐藏,用户只能与用户表单交互。

下面是失败的代码:

Machine = MachineType.Text '<-- input from userform, for example Machine = "Vertex 251" Set wsCopy = ThisWorkbook.Sheets(Machine) '<--- select that machine's sheet wsCopy.Copy '<--Run time Error 1004: Method copy of object_worksheet failed 

我已经尝试了许多不同的types,包括sheets(machine).copy

 Sheets(machine).activate Activesheet.copy 

但到目前为止没有任何工作 – 我不知道我是否做了根本错误的事情。

任何帮助将不胜感激。

干杯。

您必须在复印之前取消隐藏纸张(至less要像lturner笔记一样写入新的工作簿) – 然后您可以重新隐藏它

 Dim shtTemplate as Worksheet, sheetWasHidden As Boolean Set shtTemplate = ThisWorkbook.Sheets(Machine) 'handle the case where the sheet to be copied is Hidden If shtTemplate.Visible = xlSheetHidden Then shtTemplate.Visible = xlSheetVisible sheetWasHidden = True End If shtTemplate.Copy If sheetWasHidden Then shtTemplate.Visible = xlSheetHidden 're-hide if needed 

当你有工作表对象并使用Copy方法时,Excel似乎正在假设(或不是)要放置新工作表的位置。 我几乎总是使用After选项来定义新工作表的位置。

 Option Explicit Sub test() Dim wsCopy As Worksheet Set wsCopy = ActiveSheet wsCopy.Copy After:=wsCopy End Sub