Страницы: 1
RSS
Копирование данных из одной книги в другую без открывания самой книги.
 
Здравствуйте.
Подскажите как изменить код. Код был найден на просторах интернета.
Имеется две книги A и B. Нужно скопировать данные с листа "Input SAP" книги A  в книгу B c листом тем же названием "Input SAP"
Код задачу свою выполняет, только когда пользователь находится на активном листе "Input SAP" книги B.
Приложение. 2 файла
Спасибо большое кто отзовется!
Код
Sub copy_data()
Dim vFile As Variant
Dim wbCopyTo As Workbook
Dim wsCopyTo As Worksheet
Dim wbCopyFrom As Workbook
Dim wsCopyFrom As Worksheet

Set wbCopyTo = ActiveWorkbook
Set wsCopyTo = ActiveSheet

    'Open file with data to be copied
    vFile = Application.GetOpenFilename("Excel Files (*.xl*)," & "*.xl*", 1, "Select Excel File", "Open", False)
    
    'If Cancel then Exit
    If TypeName(vFile) = "Boolean" Then
        Exit Sub
    Else
        Set wbCopyFrom = Workbooks.Open(vFile)
        Set wsCopyFrom = wbCopyFrom.Worksheets(1)
    End If
    
    'Copy Range
    wsCopyFrom.Range(Range("A1:P1"), Range("A1:P1").End(xlDown)).Copy
    wsCopyTo.Range("A1").PasteSpecial Paste:=xlPasteValues
   
    'Close file that was opened
    wbCopyFrom.Close SaveChanges:=False

End Sub
 
КАК ПОЛУЧИТЬ ДАННЫЕ ИЗ ЗАКРЫТОЙ КНИГИ?
Согласие есть продукт при полном непротивлении сторон
 
В вопросе нет ничего про открывание книги? На сколько я понимаю нужна корректная работа макроса, находясь на любом листе любой книги Excel.
Может стоит воспользоваться конструкцией With...End with
"Все гениальное просто, а все простое гениально!!!"
 
Я у себя реализовал примерно так, может поможет. За код сильно не ругайте, только начал изучать эту тему :):
Код
Option Explicit
Sub Макрос3()
    Application.ScreenUpdating = False
    Sheets("Материалы").Select
    Range("A1").Select
    ' Запоминаем текущую книгу и лист
    Dim predlist As Worksheet
    Set predlist = ActiveSheet
    
    'Открываем файл с которого нужно скопировать данные (путь к файлу прописан полностью)
    Workbooks.Open Filename:="z:\!!!!!!Исходная база данных\Materials server.xlsx"
    Sheets("Материалы").Select
    'Копируем нужный диапазон в открывшейся книге на листе материалы (активный лист)
    Windows("Materials server.xlsx").Activate
    Range("A:L").Select
    Selection.Copy
    'Активируем последнюю книгу которую запомнила функция
    'запоминания в строках Dim/Set predlist
    
    predlist.Activate
    
'    Call Application
'    Windows("Сопроводительный лист.xlsm").Activate
    'Активация листа и ячейки в который необходимо вставить скопированный диапазон
    ActiveSheet.Paste 'Вставка
    Range("A1").Select
    Application.CutCopyMode = False
    ActiveCell.Select
    ' Закрытие файла
    Workbooks("Materials server.xlsx").Close
    Sheets("Сопроводительный лист").Select
    Application.ScreenUpdating = True
End Sub

Изменено: Sergant09 - 23.05.2019 13:36:33
 
Вернитесь, приведите сообщение в порядок. Оформление кода  - кнопка <...>
 
Я бы на вашем месте почитал про переменные, каких типов они бывают, а уж после писал макрос используя переменные в качестве хранения информации в том числе и о книгах и листах. А так вы часто используете .Select и .Activate. В правильном и быстро работающем коде в 99,9% случаев не встретишь ни .Select ни .Activate. Да и в самом редактре будет проще писать код, используя типовые переменные, методы, свойства будут показаны в ниспадающем списке.
"Все гениальное просто, а все простое гениально!!!"
 
Ну уж извиняйте, пишу как умею
 
Цитата
Sergant09 написал:пишу как умею
Поэтому и советую, почитать мануал, про переменные их типы и использование.
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1
Наверх