VBA Excel скопировать диапазон ячеек во внешнюю книгу - PullRequest
0 голосов
/ 28 апреля 2020

Ранее я имел дело с запросом ниже:

VBA Excel берет на себя управление ячейками в другой книге

относительно копирования данных из моей активной книги в какая-то внешняя рабочая тетрадь.

Теперь я хотел бы сделать аналоговую копию, но не как одну ячейку, а как диапазон.

enter image description here

Мой код выглядит следующим образом:

  Sub Splicing()

  Dim PoP As String, SN As String
  Dim Fibre As Range

  Dim newbook As Workbook
  Dim fs As Worksheet

  Set fw = Sheets("Frontsheet")
  'name = fw.Range("AA9")
  name = fw.Range("D18")
  name2 = fw.Range("D38")
  custom_name = name & " - Splicing As-build_v." & name2 & ".0"

  PoP = ActiveWorkbook.Sheets("Frontsheet").Range("D10").Value
  SN = ActiveWorkbook.Sheets("Frontsheet").Range("D12").Value

  Fibre = ActiveWorkbook.Sheets("Fibre Drop Release Sheet").Range("A2:H20").Value

  Path = ActiveWorkbook.Path & "\Splicing Template_V1.0.xlsm"
  Set newbook = Workbooks.Open(Path)

  newbook.Sheets("Frontsheet").Cells(10, 4).Value = PoP
  newbook.Sheets("Frontsheet").Cells(12, 4).Value = SN


  newbook.Sheets("Fibre drop release sheet").Cells(3, 2).Value = Fibre


  Path = ActiveWorkbook.Path & "\" & custom_name & ".xlsm"

  'Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs filename:=Path, FileFormat:=52


  End Sub

Отладчик показывает строку Fiber = и говорит: Переменная объекта или переменная блока не установлена ​​.

Я пытался также другое решение, представленное здесь:

https://www.extendoffice.com/documents/excel/3084-excel-copy-range-to-new-workbook.html

и здесь

VBA Копирование диапазона Excel в другую книгу

и здесь

http://debugvba.com/copy-data-from-one-sheet-to-another-workbook-vba-excel-debugvba/

но эти коды не соответствуют моему примеру

1 Ответ

2 голосов
/ 28 апреля 2020

Два вопроса:

Dim Fibre As Range
...
Fibre = ActiveWorkbook.Sheets("Fibre Drop Release Sheet").Range("A2:H20").Value

Изменить на

Dim Fibre As Variant

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

newbook.Sheets("Fibre drop release sheet").Range("B3:I21").Value = Fibre

Если вы не хотите жестко кодировать адрес B3:I21, тогда Resize полезно, чтобы размер получателя совпадал с размером источника.

newbook.Sheets("Fibre drop release sheet").Cells(3, 2).Resize(Ubound(Fibre, 1), Ubound(Fibre, 2)).Value = Fibre
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...