Динамически копировать диапазон ячеек из закрытой книги? - PullRequest
0 голосов
/ 28 мая 2019

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

Я пытаюсь динамически скопировать все записи в столбце F из файла 'test.xlsx' с листа 'исключение'. Макрос запускается без проблем, если вместо этого я использую статические ссылки. Вот код, который я выполняю, он дает мне ошибку времени выполнения для строки, которая копирует данные.

Sub GetClassID()

Dim App As New Excel.Application

Dim wsActive As Worksheet
Set wsActive = ThisWorkbook.ActiveSheet

Dim wbImport As Workbook
Set wbImport = App.Workbooks.Open(Filename:="C:\Test.xlsx", 
UpdateLinks:=True, ReadOnly:=True)

wbImport.Worksheets("Exception").Range("F2",Range("F2").end(xldown)).Copy
wsActive.Range("A2").PasteSpecial Paste:=xlPasteFormats
wsActive.Range("A2").PasteSpecial Paste:=xlPasteValues

App.CutCopyMode = False
wbImport.Close SaveChanges:=False
App.Quit

End Sub

Ошибка, которую я получаю - erorr времени выполнения '1004': интерфейс не зарегистрирован

Ответы [ 2 ]

1 голос
/ 28 мая 2019

По моему опыту, наиболее эффективный способ скопировать динамический диапазон - это создать переменную в виде целого числа и назначить строку последней копируемой ячейки (или столбец, если необходимо выбрать строку данных для определенногоЯ обычно выполняю что-то вроде этого:

Dim R as Integer
With ThisWorkbook.Worksheets
   R = .Cells(.Rows.Count, 1).End(xlUp).Row
End With

Затем вы можете подключить 'R' для номера строки в диапазоне, чтобы сделать его динамическим при каждом запуске макроса. Например: .Range("A1:A" & R).Copy скопирует использованный диапазон в столбце A. Это также делает действительно легким ссылаться на последнюю строку для циклов и тому подобного непрерывно в вашем коде. Надеюсь, это поможет!

1 голос
/ 28 мая 2019

Предполагается, что вы запускаете это в Excel VBA?Вам не нужно открывать другую книгу как Excel.Application, просто удалите из нее app и откройте книгу как обычно:

Sub GetClassID()

Dim wsActive As Worksheet
Set wsActive = ThisWorkbook.Sheets("Another Sheet Name")

Dim wbImport As Workbook
Set wbImport = Workbooks.Open(Filename:="C:\Test.xlsx", UpdateLinks:=True, ReadOnly:=True)

With wbImport.Worksheets("Exception")
    .Range("F2", .Range("F2").End(xlDown)).Copy
End With
wsActive.Range("A2").PasteSpecial Paste:=xlPasteFormats
wsActive.Range("A2").PasteSpecial Paste:=xlPasteValues

App.CutCopyMode = False
wbImport.Close SaveChanges:=False
App.Quit

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