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

Привет всем, я вернулся ко второму вопросу VBA для начинающих (тот же проект, что и раньше)

Информация: 2 листа - База данных и запись

Обе содержат одинаковые две таблицы только для этой записитранспонирован (заголовки в строках вместо столбцов)

Моя цель - скопировать данные из записи в последнюю строку Базы данных при добавлении дополнительной.В идеале был бы способ скопировать формулы при вводе данных сразу (или отформатировать столбцы базы данных, чтобы они содержали их)

Данные впоследствии сортируются и фильтруются в базе данных, отсюда и необходимость в таблице.У меня большие проблемы с этим объектом ListObject, и я понимаю, как он работает.

Возвращает ошибку времени выполнения 1004: сбой метода PasteSpecial класса диапазона в этой строке:

tbl.Range(LastRow).PasteSpecial Paste:=xlValues, Transpose:=True

Однако, если я изменю эту строку на:
Sheets("Database").ListObjects("Entire").PasteSpecial Paste:=xlValues, Transpose:=True

Я получаю ошибку времени выполнения 438 (объект не поддерживает это свойство или метод), что я нахожу очень запутанным, потому что они должны быть одинаковыми

Спасибо за любую помощь или предложения, они очень ценятся!Также немного не по теме, но если вы знаете какой-либо хороший ресурс, который я мог бы купить, чтобы улучшить, не стесняйтесь, дайте мне знать.

  Private Sub CommandButton2_Click()

Dim Entry As Worksheet
  Set Entry = ActiveSheet

Dim tbl As ListObject
  Set tbl = Sheets("Database").ListObjects("Entire")

Dim LastRow As Integer
  LastRow = tbl.Range.Rows.Count

Application.ScreenUpdating = False
    If Entry.Range("E9") = "y" Then
        Entry.Range("E6:E100").Copy
        tbl.ListRows.Add AlwaysInsert:=True
        tbl.Range(LastRow).PasteSpecial Paste:=xlValues, Transpose:=True

        Entry.Columns("E").Delete
    Else
        Entry.Columns("E").Delete
    End If
Application.ScreenUpdating = True

End Sub

1 Ответ

0 голосов
/ 04 февраля 2019

Очень легко очистить буфер обмена в Excel случайно, поэтому вам следует (вероятно) всегда вызывать .Copy непосредственно перед .Paste/.PasteSpecial.Изменение порядка

Entry.Range("E6:E100").Copy
tbl.ListRows.Add AlwaysInsert:=True

решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...