2013-05-02 71 views
1

我想复制工作表并将其直接放在另一张工作表之后。但是当涉及隐藏的表单时我遇到了麻烦。Excel VBA WorkSheet.Copy Excel 2013后

使用Excel 2013我打开一个新的工作簿。 在“Sheet1”之后添加一张纸。将它重命名为“HiddenSheet2” 在“HiddenSheet2”之后添加一张表。重命名新的工作表 “表Sheet 3” 所以我有 “工作表Sheet1” - “HiddenSheet1” - “表Sheet 3” 然后隐藏 “HiddenSheet1”

下运行这个VBA代码:

Sub test() 
Dim ws1 AS Worksheet 
Set wst = Sheets("Sheet1") 
wst.Copy After:=Sheets(wst.Index) 
End Sub 

插页得到安置后, “HiddenSheet2”而不是“Sheet1”之后。 我发现复制的工作表成为活动工作表。

Get Handle on last worksheet copied by Worksheet.Copy

VBA Copy Sheet to End of Workbook (with Hidden Worksheets)

但我的问题是我需要的纸张保持在一个特定的顺序。

感谢

编辑:

Sub test() 
Dim ws1 AS Worksheet 
Set wst = Sheets("Sheet1") 
wst.Copy After:=Sheets(wst.Index) 
ThisWorkbook.ActiveSheet.Move After:=Sheets(wst.Index) 
End Sub 

这不 “工作表Sheet1” 要么后直接拿到新的工作表。

+3

为什么不使用后'wst.copy:= wst'? – glh 2013-05-02 20:37:50

+0

@glh说了什么。你已经有'wst'作为Worksheet变量。只需在'After'参数中使用它:) – 2013-05-03 00:44:06

+0

'wst.copy after:= wst'和'wst.copy after:= Sheets(“Sheet1”)'产生相同的结果。我的新工作表位于隐藏工作表之后,而不是直接位于“工作表1”之后 – Jonathan 2013-05-03 13:22:02

回答

3

现有代码可以添加

Sub test() 
Dim ws1 AS Worksheet 
Set wst = Sheets("Sheet1") 
wst.Copy After:=Sheets(wst.Index) 
ThisWorkbook.ActiveSheet.Move After:=Sheets(wst.Index) 
If (ActiveSheet.Index - wst.Index - 1) <> 0 Then 
     Sheets(wst.Index + 1).Visible = True 
     ActiveSheet.Move After:=wst 
     Sheets(wst.Index + 2).Visible = False 
    End If 
End Sub 
+0

谢谢你这样做。我想我可能最终会做一个半黑客攻击。但只是想确保我没有疯狂。 我可以起来有点: '如果(ActiveSheet.Index - wst.Index - 1)<> 0,则 昏暗bVisible由于布尔 bVisible =表(wst.Index + 1)。可见 表(WST。索引+ 1).Visible = True ActiveSheet。Move After:= wst Sheets(wst.Index + 2).Visible = bVisible End If' 可能很安全地说他们隐藏的表格,因为这是唯一一次这是一个问题,但我会保存可见性只是如果Excel引发我另一个循环。 – Jonathan 2013-05-03 13:34:59

+0

不知道为什么它没有格式化代码正确... – Jonathan 2013-05-03 13:40:56

+0

+1好。不知道有关隐藏表格的问题。 – glh 2013-05-03 22:03:45

0

索引属性为零基数,除非在别处指定。床单属性是一个基础。您需要:

  1. 将1加到索引中,不是首选。
  2. 更好地引用.name属性。
  3. 引用你有I.e.表的变量。 Wst.copy之后:= wst,最好。
  4. 或者将隐藏的表格移动到新的表格之后。
+1

谢谢我会尽量避免使用索引,尽管这不是在这种情况下的问题。 – Jonathan 2013-05-03 13:43:11