我已经在VBA编写了一段时间,但是这个确实让我很难过。
我正在创建一个为机器创建技术证书的工作簿。我们根据机器类型有不同的模板,我试图让我的代码从用户输入中选择正确的工作表,然后填充工作表。仅供参考,这些模板表将被隐藏,用户只能与用户表单进行交互。
继承失败的代码:
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
我尝试过多种不同类型,包括sheets(machine).copy
或
Sheets(machine).activate
Activesheet.copy
但到目前为止没有任何工作 - 我无法判断我是否做了一些根本错误的事情。
任何帮助都将不胜感激。
干杯。
答案 0 :(得分:2)
您必须在复制之前取消隐藏工作表(至少在新工作簿中作为文本注释) - 然后您可以重新隐藏它
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
答案 1 :(得分:0)
当您拥有工作表对象并使用Copy
方法时,Excel似乎在假设(或不假设)您要放置新工作表的位置。我几乎总是使用After
选项来定义新工作表的位置。
Option Explicit
Sub test()
Dim wsCopy As Worksheet
Set wsCopy = ActiveSheet
wsCopy.Copy After:=wsCopy
End Sub