Установка диапазона при вставке данных на лист - PullRequest
0 голосов
/ 13 февраля 2020

Я копирую данные между двумя рабочими книгами Excel, используя vba:

  • Источник данных (копирование из): Рабочая книга x, лист «Лист ожидания».
  • Назначение данных (вставка в ): Рабочая тетрадь y, таблица «Данные за все годы».

Это стало проблемой, поскольку в рабочую книгу y на листе назначения, куда я вставляю данные, я добавил вспомогательные столбцы, чтобы облегчить фильтрацию данных. Однако теперь, когда я копирую и вставляю данные (автоматически с помощью vba) из исходного листа в лист назначения, кажется, что он копирует все столбцы (с данными или без данных), которые затем перекрывают мои вспомогательные столбцы, оставляя всю область пустой.

Теперь я хотел бы ограничить диапазон, в который вставляются данные, т.е. от столбца A к столбцу W, вместо вставки поверх моих вспомогательных столбцов X, Y и Z и всех оставшихся столбцов.

Пожалуйста, смотрите мой код ниже: -

Sub CopyToYearly2()

 Dim LastRow As Long
 Dim i As Long, j As Long
 Dim answer As Integer

answer = MsgBox("Do you intend to copy this data to the Yearly analysis sheet?", vbYesNo + vbQuestion, "Copy data to Yearly analysis sheet.")


   Set x = ThisWorkbook

   If answer = vbYes Then

   Set y = Workbooks.Open("S:\Downloads\workbook y.xlsm")


   With x.ActiveSheet 'Determine last used row on waitinglist.
      LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
   End With

   With y.Sheets("ALL Years Data")
      j = .Cells(.Rows.Count, "C").End(xlUp).Row + 1
   End With

   For i = 3 To LastRow 

       'With x.Sheets("Waiting List")
       With x.ActiveSheet 
               .Rows(i).Copy Destination:=y.Sheets("ALL Years Data").Range("A" & j)
               j = j + 1

       End With
   Next i

   'Save x and y:
x.Save
y.Save

 Else
    'do nothing

End If


End Sub

Спасибо.

1 Ответ

2 голосов
/ 13 февраля 2020

Вам не нужно al oop для копирования. Сделай это за один шаг. Кроме того, не используйте Rows, но ограничивайте диапазон для копируемых столбцов, которые вы хотите:

x.Worksheets("Waiting List").Range("A3:W" & LastRow).Copy _
     Destination:=y.Worksheets("ALL Years Data").Range("A" & j)

Также

Dim answer As Integer

, вероятно, лучше, чем

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