Страницы: 1 2 След.
RSS
Как с помощью VBA скопировать данные из одной книги в другую , вставляя только значения.
 
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Что собственно макрос и делает. Что в нём дописать, чтобы вставлялись только значения ?
У самого ничего не получается.
Вот код:
Код
Sub Kopirovanie()

'
' Kopirovanie Макрос

'

'Выделить диапазон который необходимо скопировать
Range("Таблица1").Select
'Скопировать то, что выделено
Selection.Copy
ChDir "C:\Users\Oleg\Desktop"
Workbooks.Open Filename:="Книга2.xlsm"
'Выделить начальную ячейку в которую необходимо вставить скопированные данные
Range("A2").Select
'Вставить данные
ActiveSheet.Paste

'сохранить текущую книгу
ActiveWorkbook.Save
'Закрыть книгу
ActiveWorkbook.Close
End Sub
 
В предыдущей теме, сложно было выложить пример? И тут создали дубликат темы!
Код
Sub Kopirovanie()
'Скопировать то, что выделено
ChDir "C:\Users\Oleg\Desktop"
Set imortwb = Workbooks.Open("Книга2.xlsm")
'Выделить начальную ячейку в которую необходимо вставить скопированные данные
ThisWorkbook.ActiveSheet.Range("Таблица1").Copy
Range("A2").PasteSpecial Paste:=xlPasteValues
'сохранить текущую книгу
ActiveWorkbook.Save
'Закрыть книгу
ActiveWorkbook.Close
End Sub
Изменено: skais675 - 17.01.2020 10:21:28
 
Это не дубликат. Там вопрос был в том как реализовать это самое копирование.
В итого я нашёл решение.
А здесь вопрос в том чтобы копировать только значения.
 
Код
Sub Kopirovanie()
    Dim a As Variant
    With Range("Таблица1")
        Select Case .Cells.Count
        Case 1
            ReDim a(1 To 1, 1 To 1)
            a(1, 1) = .Cells(1).Value
        Case Else
            a = .Cells.Value
        End Select
    End With
    
    Dim wb As Workbook
    Set wb = Workbooks.Open("C:\Users\Oleg\Desktop\Книга2.xlsm")
    Range("A2").Resize(UBound(a, 1), UBound(a, 1)) = a
     
    wb.Close True
End Sub
Не тестировал, не было примера.
 
Код
Sub Kopirovanie()
 
'
' Kopirovanie Макрос
 
'
 
'Выделить диапазон который необходимо скопировать
Range("Таблица1").Select
'Скопировать то, что выделено
Selection.Copy
ChDir "C:\Users\Oleg\Desktop"
Workbooks.Open Filename:="Книга2.xlsm"
'Выделить начальную ячейку в которую необходимо вставить скопированные данные
Range("A2").Select
'Вставить данные
Selection.PasteSpecial Paste:=xlPasteValues
 
'сохранить текущую книгу
ActiveWorkbook.Save
'Закрыть книгу
ActiveWorkbook.Close
End Sub
 
Благодарю. Все работает. Хотя вроде бы использовал эту же команду.
Selection.PasteSpecial Paste:=xlPasteValues
 
Уважаемые форумчане. Прошу помощи
есть книга1 лист1 в я чейке AS3 стоит формула ="$A$2:$F$"&(СЧЁТЗ(C:C)+1), другими словами она текстово показывает мне нужный диапазон
в книге2 лист2 в ячейке F6 стоит формула ="$A$"&(СЧЁТЗ(C:C)+1) которая показывает первую свободную ячейку в стобце.
как макросом реализовать что бы он брал диапазон ячеек с книга1 лист1 согласно ячейке AS3, копировал
и в книге2 лист2 выделял ячейку которая указана в ячейке F6 и вставлял скопированные данные значением.

Сам я далекий в этих делах иногда получается собрать косками коды. В этот раз что то ни как..
Изменено: zhlobus - 05.07.2024 10:55:05
 
zhlobus, а что с ЭТОЙ темой делать?
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Пытаюсь собрать кусочками, тут надеюсь вырвать вариант с копированием и вставкой, а там продолжим полный ход действий уже с проверкой занятости файла.
Или так нельзя ? :(
 
Цитата
zhlobus написал:
как макросом реализовать что бы он брал диапазон ячеек с книга1 лист1 согласно ячейке AS3



А как массив выгрузить на лист - есть пример выше.
 
Hugo, Спасибо конечно, но сложно мне разобрать, ведь как я говорил у меня 0 познаний :(
Что не так?
Код
Sub CopyPaste()

Dim a
a = Range(Range("P2")).Value

'Открываем файл с которого нужно скопировать данные
Workbooks.Open Filename:="G:\Документы подразделений\Упр-е логистики\Отдел организации перевозок\проекты 2024\TEST\Cвод 2024-2025.xlsb"
'Активируем нужную нам книгу
Workbooks("Cвод 2024-2025.xlsb").Activate
'Выделяем и вставляем скопированные данные в ячейку
ActiveWorkbook.Worksheets("ПЭ").Range("B89").Select
ActiveSheet.Paste
'Закрываем книгу откуда мы скопировали данные
WB.Save
WB.Close

End Sub
 
Цитата
zhlobus написал:
Что не так?
Вы ничего ещё не скопировали.
А как выгрузить на лист массив - см. #4
Там чуть ошибка, Вам нужно без всяких селектов и пастов
Код
Worksheets("ПЭ").Range("B89").Resize(UBound(a, 1), UBound(a, 2)) = a
Изменено: Hugo - 05.07.2024 12:14:33
 
Hugo,  Я готов застрелиться :(
Код
Sub CopyPaste()
   
Dim a
a = Range(Range("P2")).Value.Copy
        
    Dim wb As Workbook
    Set wb = Workbooks.Open("G:\Документы подразделений\Упр-е логистики\Отдел организации перевозок\проекты 2024\TEST\Cвод 2024-2025.xlsb")
    Worksheets("ПЭ").Range("B89").Resize(UBound(a, 1), UBound(a, 2)) = a


wb.Close True

End Sub

 
.Copy откуда? Я такого не писал.
А вообще должно работать.
Но надёжнее
Код
Sub CopyPaste()
Dim a, wb As Workbook

a = Range(Range("P2")).Value
        
   Set wb = Workbooks.Open("G:\Документы подразделений\Упр-е логистики\Отдел организации перевозок\проекты 2024\TEST\Cвод 2024-2025.xlsb")
   wb. Worksheets("ПЭ").Range("B89").Resize(UBound(a, 1), UBound(a, 2)) = a

wb.Close True

End Sub

Если конечно сперва активен лист с адресом и данными, код не в модуле другого листа, и есть по указанному адресу книга Cвод 2024-2025.xlsb с листом "ПЭ" в ней.
 
Hugo, Вы супер, работает как надо
НО, задача что бы в файле Cвод 2024-2025.xlsb в лист "ПЭ" брал так же из ячейки A4 значение адрес первой пустой ячейки в столбце.
A4 формула ="$B$"&(СЧЁТЗ(C:C)+1)

Вы меня правда простите, но это мне очень сильно поможет и решит много проблем по работе.
Изменено: zhlobus - 05.07.2024 13:41:47
 
Ну значит сперва открываем файл, берём из него аналогично адрес, по адресу выгружаем массив.
Без проверки на файле не люблю писать...
Код
Sub CopyPaste()
Dim a, wb As Workbook

a = Range(Range("P2")).Value
        
   Set wb = Workbooks.Open("G:\Документы подразделений\Упр-е логистики\Отдел организации перевозок\проекты 2024\TEST\Cвод 2024-2025.xlsb")
   wb. Worksheets("ПЭ").Range(wb. Worksheets("ПЭ").Range("A4")).Resize(UBound(a, 1), UBound(a, 2)) = a

wb.Close True

End Sub
Изменено: Hugo - 05.07.2024 13:47:58
 
Или так чуть экономнее по символам:
Код
Sub CopyPaste()
Dim a, wb As Workbook

a = Range(Range("P2")).Value
        
   Set wb = Workbooks.Open("G:\Документы подразделений\Упр-е логистики\Отдел организации перевозок\проекты 2024\TEST\Cвод 2024-2025.xlsb")
   
   with wb. Worksheets("ПЭ")
   .Range(.Range("A4")).Resize(UBound(a, 1), UBound(a, 2)) = a
   end with
   
wb.Close True

End Sub
 
Hugo, Какую то ошибку выдает (400)

Простите я тупой, не ту ячейку указывал. Работает как часики.
Только если файл Свод открыт спрашивает открыть ли еще раз.
Почему то не понимает что разницы нет, раз открыт, занеси молча и все данные :)
Изменено: zhlobus - 05.07.2024 14:13:42
 
Ну можно проверить его наличие среди открытых книг, или отключить вообще любые такие вопросы
 
Hugo, это в настройках самого экселя?
 
Это можно кодом задать - в начале
Application.displayalerts=false
Но в конце включить в true
Но так будет молча открывать файл не спрашивая
Изменено: Hugo - 05.07.2024 15:25:12
 
Hugo, Спасибо вам за все.
Для вас подобное минута с вашими знаниями, а я мучался 2 недели и то, только с вашего ГОТОВОГО варианта получилось
В знак благодарности, могу вам копеечку на счет закинуть. Не много, но на пивко или сок хватит точно :)
 
Hugo, Думал дальше смогу по аналогии добавить что нужно, но и тут ни как :(
нужно что бы после того как проделана та часть( №17 сообщение) макрос взял с ячейки B2 адрес нужной ячейки, которую скопировать  (это все уже в той книге, в которую уже вставили значения ) и вставить в соседний лист этой же книги в ячейку которая указана в ячейке A1 листа куда вставить.
И вроде это будет пик моего счастья.
Изменено: zhlobus - 05.07.2024 15:42:38
 
Цитата
zhlobus написал:
вставить в соседний лист
- без проблем, но:
1. соседних листов может быть два!
2. юзер в любой момент может соседним листом сделать любой, даже свой собственный созданный только что...
В какой будете копировать данные?
А так то просто, всё выше в коде уже есть, но виртуально ну его... файл давайте
 
Hugo, Лист называется ПЗП
 
Цитата
Hugo написал:
ну его... файл давайте
сделайте пример с проблемой, не нужен рабочий файл
 
Hugo,
Код
Sub CopyPaste()
Dim a, wb As Workbook

a = Range(Range("B1")).Value
        
   Set wb = Workbooks.Open("G:\Документы подразделений\Упр-е логистики\Отдел организации перевозок\проекты 2024\TEST\Cвод 2024-2025.xlsb")
   
   With wb.Worksheets("ПЗП")
   .Range(.Range("B1")).Resize(UBound(a, 1), UBound(a, 2)) = a
   End With

   Следующий шаг в этой же книге (Cвод 2024-2025.xlsb) в этом же листе ("ПЗП") с ячейки A1 (в которой указан диапазон который нужно скопировать)
копируем и вставить нужно в эту же книгу (Cвод 2024-2025.xlsb) на лист ("ПЭ") в ячейку, адрес которой указан в ячейке А1

wb.Close True

End Sub
 
Трудно понять без файла, но наверное такой кусок отработает:
Код
   With wb.Worksheets("ПЗП")
   a = .Range(.Range("A1")).Value ' взяли в массив с листа "ПЗП"
   End With
   With wb.Worksheets("ПЭ")
   .Range(.Range("A1")).Resize(UBound(a, 1), UBound(a, 2)) = a
   End With
Изменено: Hugo - 12.07.2024 15:43:13
 
Так?
Код
Sub CopyPaste()
Dim a, wb As Workbook

a = Range(Range("B1").Text).Value
Set wb = Workbooks.Open("G:\Документы подразделений\Упр-е логистики\Отдел организации перевозок\проекты 2024\TEST\Cвод 2024-2025.xlsb")
With wb.Worksheets("ПЗП")
  .Range(.Range("B1").Text).Resize(UBound(a, 1), UBound(a, 2)) = a

'Следующий шаг в этой же книге (Cвод 2024-2025.xlsb) в этом же листе ("ПЗП") с ячейки A1
'(в которой указан диапазон который нужно скопировать)
'копируем и вставить нужно в эту же книгу (Cвод 2024-2025.xlsb) на лист ("ПЭ") в ячейку,
'адрес которой указан в ячейке А1
  .Range(.Range("A1").Text).Copy wb.Worksheets("ПЭ").Range(.Range("A1").Text)
End With
wb.Close True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Hugo, ошибка type mismatch
Код
Sub CopyPaste()
Dim a, wb As Workbook

a = Range(Range("B1")).Value
        
   Set wb = Workbooks.Open("G:\Документы подразделений\Упр-е логистики\Отдел организации перевозок\проекты 2024\Cвод 2024-2025.xlsb", Password:="789", WriteResPassword:="789")
   
   With wb.Worksheets("ПЗП")
   .Range(.Range("B1")).Resize(UBound(a, 1), UBound(a, 2)) = a
   End With
   
   With wb.Worksheets("ПЗП")
   a = .Range(.Range("A1")).Value ' взяли в массив с листа "ПЗП"
   End With
   
   With wb.Worksheets("ПЭ")
   .Range(.Range("A1")).Resize(UBound(a, 1), UBound(a, 2)) = a
   End With
   
wb.Close True

End Sub
данные вносятся влист ПЗП а дальше ноль, на этом выдает ошибку
Страницы: 1 2 След.
Читают тему
Наверх