【问题标题】:using sheet index instead of name in VBA在 VBA 中使用工作表索引而不是名称
【发布时间】:2018-04-07 23:42:57
【问题描述】:

我想从我的第一个工作表中复制一些内容,将它们粘贴到一个新工作表中,然后删除第一个工作表并将新的(唯一的)工作表重命名为 Sheet1。但是我永远不知道创建第二张表时会命名它。大多数时候,它将是 Sheet2,但我不能指望它。这是刚刚从创建一个宏中获取的代码,但它使用的是在此实例中创建的工作表名称。我想改用工作表的索引,但不知道语法:

    Columns("A:D").Select
    Selection.Copy
    Sheets("Sheet2").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.Delete
    Sheets("Sheet2").Select
    Sheets("Sheet2").Name = "Sheet1"

那么“Sheet2”在哪里……我该如何制作它,所以它使用的是第二张工作表,不一定是名为 Sheet2 的工作表?

谢谢。

【问题讨论】:

    标签: vba excel indexing


    【解决方案1】:

    您可以创建一个变量作为新工作表:

    Sub sheetdelet()
    Dim ws As Worksheet
    With ThisWorkbook
        Set ws = .Worksheets.Add
        .Worksheets("Sheet1").Range("A:D").Copy ws.Range("A1")
        Application.DisplayAlerts = False
        .Worksheets("Sheet1").Delete
        Application.DisplayAlerts = True
        ws.Name = "Sheet1"
    End With
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      Worksheets(2) 是指第二张纸的方式。

      Worksheets(Worksheets.Count)到最后一个。

      试试这样:

      Debug.Print Worksheets(Worksheets.Count).name
      

      【讨论】:

      • 那么在上面的例子中,将所有“Sheet2”替换为Worksheets(2)?
      • @12fretter - 是的
      • 我带着一个新的问题回来了,同样的话题。我有一个新工作簿,在一个单元格中: ='[Daily Customer Count.xlsx]Mar 18'!$G$3 其中 Mar 18 是另一个文件中工作表的名称。我想始终使用该其他文件的表 1,而不是名称为 Mar 18 的表。我尝试使用 Worksheets(1),但它返回错误。这可以在不编码的情况下完成吗?因为我有一大堆这些要做一次,所以希望每次有人在参考工作簿中输入新工作表时,我的新工作簿都会自动更新。
      • @12fretter - 单独提出更新的问题确实是个好主意。因此,更多的人将能够回答:)
      猜你喜欢
      • 2022-11-13
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2012-08-22
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      相关资源
      最近更新 更多