Как изменить имя скопированной таблицы (во время метода копирования-вставки)? - PullRequest
0 голосов
/ 04 июня 2018

Как я могу изменить имя таблицы, которую я копирую?

У меня уже есть таблица, которую я могу успешно скопировать с помощью следующей процедуры

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 ]

0 голосов
/ 04 июня 2018

Вы можете обратиться к объекту 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
0 голосов
/ 04 июня 2018

Есть много способов сделать это.Самое простое, что я могу придумать, - это назначить вторую таблицу объекту 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

Однако, это всегда будет менять имя второй таблицы на листе, и это не всегда то, что вы копируете.


И здесьЭто обходной путь, задающий конкретный диапазон новой таблицы и назначающий ей правильный ListObject:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...