代码之家  ›  专栏  ›  技术社区  ›  Samuel Hulla

如何更改复制表的名称(在复制粘贴方法期间)?

  •  1
  • Samuel Hulla  · 技术社区  · 7 年前

    如何更改正在复制粘贴的表的名称?

    我已经有一张桌子了,我可以按照以下步骤成功地复制粘贴

    Private Sub prev_comments_button_Click()
    
        Dim tbl As ListObject: Set tbl = Sheets("Summary").ListObjects("t_sum")
        Dim lr As Integer
    
        lr = get_tbl_size + 2 ' gets the table size of the current table _
                                and we move by two rows, to indent the copied table
    
        tbl.Range.Copy Destination:=Sheets("Summary").Range("B" & lr)
    
    End Sub
    

    问题是,有时我的表索引会出现故障,无法为复制的表指定名称,例如T_sum3而不是T_sum2,这意味着我无法在工作表中一致地选择复制的表。

    是否可以在 复制粘贴方法?

    我在想类似于

    tbl.Range.Copy Destination:=Sheets("Summary").Range("B" & lr) Name:="t_sum2"

    ^但这显然行不通

    2 回复  |  直到 6 年前
        1
  •  2
  •   Olly    7 年前

    您可以引用与一个范围相交的listobject-因此,如果我们使用一个范围变量作为目标,我们可以引用listobject并重命名它,特别是:

    Private Sub prev_comments_button_Click()
    
        Dim tbl As ListObject
        Dim lr As Integer
        Dim rng As Range
    
        Set tbl = Sheets("Summary").ListObjects("t_sum")
    
        lr = get_tbl_size + 2 ' gets the table size of the current table _
                                and we move by two rows, to indent the copied table
    
        Set rng = Sheets("Summary").Range("B" & lr)
        tbl.Range.Copy rng
        rng.ListObject.Name = "Copied Table"
    
    End Sub
    
        2
  •  1
  •   Vityata    7 年前

    有很多方法可以做到。我能想到的最简单的方法是将第二个表分配给listobject并更改 ListObject . 这样地:

    Option Explicit
    
    Sub CopyTable()
    
        Dim tbl As ListObject
        Dim lr As Long
        Dim newTbl As ListObject
    
        Set tbl = Worksheets(1).ListObjects("Table1")
        tbl.Range.Copy Destination:=Worksheets(1).Range("C20")
    
        Set newTbl = Worksheets(1).ListObjects(2)
        newTbl.Name = "Gosho"
    
    End Sub
    

    但是,它总是会更改工作表中第二个表的名称,而这并不总是您要复制的表。


    下面是一些解决方法,设置新表的特定范围,从而将其分配给正确的 可以通过 :

    Option Explicit
    
    Sub CopyTable()
    
        Dim tbl As ListObject: Set tbl = ActiveSheet.ListObjects("Table1")
        Dim wks As Worksheet: Set wks = Worksheets(1)
        Dim tblRange As Range: Set tblRange = tbl.Range
    
        Dim newTbl As ListObject
        Dim newTblRange As Range
        Dim rngToCopy As Range: Set rngToCopy = Range("A20")
    
        Set newTblRange = wks.Range(rngToCopy, _
                            rngToCopy.Offset(tblRange.Rows.Count, tblRange.Columns.Count))
    
        tbl.Range.Copy Destination:=rngToCopy        
        Set newTbl = newTblRange.ListObject
        newTbl.Name = "Goshkata be"
    
    End Sub
    
    推荐文章