Копирование и вставка

Под копированием и вставкой будет подразумевать копирование всего текущего диапазона, как в примере ООО. В VBA задача решается очень просто:

Sub CopyCurrentRegion2()
ActiveWorkbook.Worksheets.Add after:=Worksheets("Sheet1")
Worksheets(2).Name = "Sheet2"
Worksheets("Sheet1").Range("A1").CurrentRegion.Copy Sheets("Sheet2").Range("A1")
End Sub
Данный код копирует все данные с листа 1 на лист 2, лист2 предварительно вставляется.

Если нужно вставить только значения используем .PasteSpecial:

Sub CopyCurrentRegion3()
ActiveWorkbook.Worksheets.Add after:=Worksheets("Sheet1")
Worksheets(2).Name = "Sheet2"
Worksheets("Sheet1").Range("A1:R65536").Copy 
Sheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub

Копирование из закрытых книг лучше не проводить, хотя VBA предоставляет такую возможность. Такое копирование дольше выполняется и снижает производительность. Лучше открывать книгу, скрывая это от пользователя. В следующем коде мы вставили данные с первого листа файла Реестр документов ГК, находящегося в той же папке, что и открытый Реестр документов:

Sub CopyBook()
Dim FileSpec As String
Dim i As Integer
Dim FileName As String
Dim FileListO As String
Dim FoundFiles As Integer
' Определение пути и сведений о файле - ищем файл в той же папке что и открытый
FileSpec = ThisWorkbook.Path & "\" & "Реестр документов для ГК.xls"
FileName = Dir(FileSpec)
 'Отключаем обновление экрана
Application.ScreenUpdating = False
'Открываем нужный файл
Workbooks.Open FileSpec
 sAddress = "A1:R65536" 'указываем нужный диапазон"
    'получаем значение
    vData = Sheets("Лист1").Range(sAddress).Value
    'Закрываем книгу
    ActiveWorkbook.Close False
    'Вставляем лист и записываем данные на этот активный лист книги,
    'с которой запустили макрос
ActiveWorkbook.Worksheets.Add after:=Worksheets("Sheet1")
Worksheets(2).Name = "Sheet2"
    If IsArray(vData) Then
        [A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
    Else
        [A1] = vData
    End If
    'Включаем обновление экрана
    Application.ScreenUpdating = True

End Sub



Комментарии

Популярные сообщения из этого блога

Запуск макросов в автоматическом режиме по расписанию

Пакетная обработка отчетов

Отправка отчетов по электронной почте