Как скопировать ячейки из template.xml (файл 2003 года) в mydoc.xltm - PullRequest
0 голосов
/ 02 мая 2019

Нужна помощь с кодом для копирования ячеек (диапазон / весь лист) из второй книги.

Макрос используется внутри файла 094-0 ..... macro.xlsm, и мне нужно скопировать первый лист (или диапазон A1: минимум T10) от второго файла до последнего листа из первого файла.Затем закройте второй файл без сохранения изменений.

У меня проблема с активацией wokrbook и вставкой данных.

Dim wbk As Workbook

Sheets.Add(after:=Sheets(Sheets.Count)).name = artikl & "_SK" & i 'it's OK 

strSecondFile = "C:\…..\template_2003_XML.xml"
strFirstFile = "C:\…..\094-022605-00001_w_macro.xlsm"

Set wbk = Workbooks.Open(strSecondFile)

    Range("A1:T350").Copy

Set wbk = Workbooks("094-022605-00001_w_macro").Activate

With wbk.Sheets(sheets.Count)
    Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
End With

Workbooks("template_2003_XML.xml").Close savechanges:=False

1 Ответ

0 голосов
/ 02 мая 2019

Вам не нужно .Activate, просто установите книгу без нее.• Вам может пригодиться чтение Как избежать использования Select в Excel VBA .

Также укажите, в какой книге и рабочей таблице этот диапазон равен Range("A1:T350").Обратите внимание, что вы Set wbk дважды на две разные книги.Таким образом, вы должны также использовать две разные переменные, например wbkSource и wbkDestination.

Также ваш оператор with With wbk.Sheets(sheets.Count) бесполезен, если вы не передадите своему диапазону начальный ., что он должен использовать оператор with: .Range()

Sheets.Add(After:=Sheets(Sheets.Count)).Name = artikl & "_SK" & i 'it's OK 

Dim SourceFilePath As String
SourceFilePath = "C:\…..\template_2003_XML.xml"

Dim DestinationFilePath As String
DestinationFilePath = "C:\…..\094-022605-00001_w_macro.xlsm"

Dim wbkSource As Workbook
Set wbkSource = Workbooks.Open(SourceFilePath)

Dim wbkDestination As Workbook
Set wbkDestination = ThisWorkbook 'Workbooks("094-022605-00001_w_macro")


wbkSource.Worksheets("source sheet").Range("A1:T350").Copy    
With wbkDestination.Sheets(sheets.Count)
    .Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With

wbkSource.Close SaveChanges:=False

Рекомендую всегда активировать Option Explicit: в редакторе VBA перейдите на Инструменты Параметры Требуется переменная декларация .

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