【问题标题】:Excel VBA WorkSheet.Copy After Excel 2013Excel VBA WorkSheet.Excel 2013 之后的复制
【发布时间】:2013-04-27 03:44:51
【问题描述】:

我想复制一个工作表并将其直接放在另一个工作表之后。但是当涉及到隐藏的工作表时,我遇到了麻烦。

我使用 Excel 2013 打开了一个新工作簿。 在“Sheet1”之后添加一个工作表。将其重命名为“HiddenSheet2” 在“HiddenSheet2”之后添加一个工作表。重命名新工作表“Sheet3” 所以我有“Sheet1” - “HiddenSheet1” - “Sheet3” 然后隐藏“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”之后直接获得新工作表。

【问题讨论】:

  • 为什么不使用wst.copy after:=wst
  • @glh 说了什么。您已经将 wst 作为 Worksheet 变量。只需将其用于After 参数:)
  • wst.copy after:=wstwst.copy after:=Sheets("Sheet1") 产生相同的结果。我的新工作表位于隐藏工作表之后,而不是直接在“Sheet1”之后
  • 但是是的,因为使用wst.copy after:=wst,它会做得更多

标签: vba excel excel-2013


【解决方案1】:

现有代码可以添加

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

【讨论】:

  • 谢谢这成功了。我想我最终可能会做一个半破解。但只是想确保我没有疯。我可以稍微提高一下:If (ActiveSheet.Index - wst.Index - 1) &lt;&gt; 0 Then Dim bVisible As Boolean bVisible = Sheets(wst.Index + 1).Visible Sheets(wst.Index + 1).Visible = True ActiveSheet.Move After:=wst Sheets(wst.Index + 2).Visible = bVisible End If 可以肯定地说他们是隐藏的工作表,因为这是唯一一次出现问题,但我会保存可见性,以防 Excel 将我抛出另一个循环。
  • +1 好。不知道隐藏工作表的问题
【解决方案2】:

索引属性是零基,除非在别处指定。 Sheets 属性是一个的基础。您需要:

  1. 索引加 1,不是首选。
  2. 最好引用 .name 属性。
  3. 引用您拥有的工作表变量,即Wst.copy after:=wst, best.
  4. 或者将隐藏的工作表移到新工作表之后。

【讨论】:

  • 谢谢,我会尽量避免使用索引,尽管在这种情况下这不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 2020-05-29
相关资源
最近更新 更多