Проблема с VBA - Копирование из одной книги в другую? - PullRequest
0 голосов
/ 14 января 2020

Я предвосхищу это, говоря, что я полный новичок в VBA, но не программирую. Я пытаюсь написать часть сценария VBA, который может копировать данные из одной рабочей таблицы в другой рабочей книге в уже существующую рабочую таблицу в другой рабочей книге.

Я пытаюсь использовать динамические диапазоны c, поскольку каждый раз знаю начальную точку для данных, однако возникают проблемы, связанные с копированием. Код работает до точки копии, где он застаивается без кодов ошибок. Эффективно застревает в стазисе, требующем действий пользователя.

Set sht = ThisWorkbook.Worksheets("Requisitions Raised")
Set StartCell = ThisWorkbook.Worksheets("Requisitions Raised").Range("A8")
LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column
Set startingRange = sht.Range(StartCell, sht.Cells(LastRow, LastColumn))

Set sht = Workbooks(FileName).Worksheets("1-Data")
Set StartCell = Workbooks(FileName).Worksheets("1-Data").Range("A8")
LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column
Set copyRange = sht.Range(StartCell, sht.Cells(LastRow, LastColumn))

ThisWorkbook.Worksheets("Requisitions Raised").startingRange.Value = Workbooks(FileName).Worksheets("1-Data").copyRange.Value

Я также попробовал следующее безрезультатно

Workbooks(FileName).Worksheets("1-Data").copyRange.Copy Destination:=ThisWorkbook.Worksheets("Requisitions Raised").startingRange

Что является причиной ошибки? Есть ли лучшее решение для копирования?

Приветствия!

1 Ответ

0 голосов
/ 14 января 2020

Согласно моему комментарию, вы в настоящее время Set свой Range объект, но затем попытаетесь использовать их как члены Worksheet, что приведет (по крайней мере для меня) к ошибке компиляции.

Вместо копирования / вставки я бы посоветовал динамический c Value перевод. Согласно @FoxfireAndBurnsAndBurns также сказал; вам нужен объект равного размера Range (или массивы). Поэтому я включил Resize из Range("A8"). Попробуйте следующее:

Dim sht1 As Worksheet, sht2 As Worksheet
Dim lr As Long, lc As Long

Set sht1 = ThisWorkbook.Worksheets("Requisitions Raised")
Set sht2 = Workbooks(FileName).Worksheets("1-Data")

lr = sht2.Cells(sht2.Rows.Count, 1).End(xlUp).Row
lc = sht2.Cells(8, sht2.Columns.Count).End(xlToLeft).Column

sht1.Cells(8, 1).Resize(lr - 7, lc).Value = sht2.Range(sht2.Cells(8, 1), sht2.Cells(lr, lc)).Value

Как видите, я использовал две разные переменные для Worksheet. Само по себе не имеет смысла полные имена, но это помогает различать sh. Я думаю, это личное предпочтение.

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