2016-02-25 95 views
1

我一直在VBA编码一段时间,但这一个真的难倒我。Excel 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

您必须复制它(至少到一个新的工作簿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 
+0

要提:您可以复制工作表而如果您为复制的工作表提供了目的地(尽管新工作表也将隐藏),它将被隐藏。 –

+0

完成了!我不确定隐藏是否与它有关,但这已经奏效了!非常感谢! – MJ2507

+0

至于你最后的评论 - 我确实尝试并设置目的地,即复制后:=张(....等但也没有工作。隐藏的水平是否有所作为?我有我的床单设置为xlveryhidden – MJ2507

0

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

Option Explicit 

Sub test() 
    Dim wsCopy As Worksheet 
    Set wsCopy = ActiveSheet 
    wsCopy.Copy After:=wsCopy 
End Sub 
相关问题