Excel Vba - 调用具有可变图纸名称

时间:2016-02-25 16:26:31

标签: excel vba excel-vba

我已经在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

但到目前为止没有任何工作 - 我无法判断我是否做了一些根本错误的事情。

任何帮助都将不胜感激。

干杯。

2 个答案:

答案 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