Копирование с листа на лист миф excel

Содержание

  1. Метод Range.Copy (Excel)
  2. Синтаксис
  3. Параметры
  4. Возвращаемое значение
  5. Пример
  6. Поддержка и обратная связь
  7. Метод Worksheet.Copy (Excel)
  8. Синтаксис
  9. Параметры
  10. Замечания
  11. Пример
  12. Поддержка и обратная связь
  13. VBA Excel. Копирование данных с одного листа на другой
  14. Условие задачи по копированию данных
  15. Решение копированием с листа на лист
  16. Решение с использованием массивов
  17. 6 комментариев для “VBA Excel. Копирование данных с одного листа на другой”
  18. VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)
  19. Метод Range.Cut
  20. Синтаксис
  21. Параметры
  22. Метод Range.Copy
  23. Синтаксис
  24. Параметры
  25. Метод Worksheet.Paste
  26. Синтаксис
  27. Параметры
  28. Примеры
  29. 43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
  30. Метод Sheets.Copy (Excel)
  31. Синтаксис
  32. Параметры
  33. Замечания
  34. Пример
  35. Поддержка и обратная связь

Метод Range.Copy (Excel)

Копирует диапазон в указанный диапазон или в буфер обмена.

Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.

Синтаксис

выражение.Copy (Destination)

выражение: переменная, представляющая объект Range.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Destination Необязательный Variant Указывает новый диапазон, в который будет скопирован заданный диапазон. Если этот аргумент опущен, Microsoft Excel копирует диапазон в буфер обмена.

Возвращаемое значение

Пример

В следующем примере кода копируются формулы ячеек A1:D4 с листа Sheet1 в ячейки с E5:H8 на листе Sheet2.

В приведенном ниже примере кода проверяется значение столбца D для каждой строки на листе Sheet1. Если значение в столбце D равно «A», вся строка копируется на лист SheetA в следующую пустую строку. Если значение равно «B», строка копируется на лист SheetB.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Метод Worksheet.Copy (Excel)

Копирует лист в другое место в текущей или новой книге.

Синтаксис

expression. Копирование (до, после)

Выражение Переменная, представляющая объект Worksheet .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Before Необязательный Variant Лист, перед которым будет размещен скопированный лист. Невозможно указать параметр Before , если указать After.
After Необязательный Variant Лист, после которого будет размещен скопированный лист. Вы не можете указать After , если укажем значение До.

Замечания

Если не указать значение «До» или «После», Microsoft Excel создает новую книгу, содержащую скопированный объект Worksheet . Только что созданная книга содержит свойство Application.ActiveWorkbook и содержит один лист. На одном листе сохраняются свойства Name и CodeName исходного листа. Если скопированный лист содержал лист кода листа в проекте VBA, он также переносится в новую книгу.

Выбор массива из нескольких листов можно скопировать в новый пустой объект Workbook аналогичным образом.

Источник и назначение должны находиться в одном экземпляре Excel.Application. В противном случае возникает ошибка среды выполнения 1004: не поддерживается такой интерфейс, если использовался что-то подобное Sheet1.Copy objWb.Sheets(1) , или ошибка среды выполнения 1004: сбой метода копирования класса Worksheet, если использовалось что-то подобное ThisWorkbook.Worksheets(«Sheet1»).Copy objWb.Sheets(1) .

Пример

В этом примере выполняется копирование Sheet1, помещая его после Sheet3.

В этом примере сначала файл Sheet1 копируется в новую пустую книгу, а затем сохраняет и закрывает новую книгу.

В этом примере листы Sheet1, Sheet2 и Sheet4 копируются в новую пустую книгу, а затем сохраняются и закрываются.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

VBA Excel. Копирование данных с одного листа на другой

Решение задачи по копированию данных с одного листа на другой без использования и с использованием массивов. Вызов из кода VBA Excel других процедур.

Условие задачи по копированию данных

На одном листе расположен список повторяющихся городов с информацией о предприятиях общепита:

Исходная таблица задания №1

Необходимо данные по каждому городу перенести в одну строку на другом листе (таблица обрезана справа):

Часть результирующего списка задания №1

Решение копированием с листа на лист

Это решение значительно проще, чем с использованием массивов, но более медленное. При больших объемах информации обработка может длиться достаточно долго. Решение достигается путем присваивания значений ячеек из таблицы первого листа ячейкам второго листа.

Переменные:

  • n1 – количество строк в исходной таблице;
  • n2 – номер столбца текущей ячейки исходной таблицы, к которой обращается цикл;
  • n3 – номер строки текущей ячейки на втором листе;
  • n4 – номер столбца текущей ячейки на втором листе;
  • i1 – счетчик цикла For… Next;
  • gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.

Решение с использованием массивов

Циклы в массивах работают очень быстро, но решение с ними может быть сложнее, чем при простом присваивании значений одних ячеек другим. В этом примере для упрощения кода две процедуры записаны отдельно и в нужные моменты вызываются для исполнения.

Подпрограммы Kopirovanie и Vstavka используются в цикле For. Next процедуры Resheniye2 по два раза, поэтому их коды вынесены за пределы процедуры Resheniye2 и вызываются по мере необходимости.

Переменные:

  • massiv1 – его элементам присваиваются значения ячеек исходной таблицы;
  • massiv2 – одномерный массив, заполняемый данными из переменной txt1;
  • massiv3 – двумерный массив, заполняемый данными из одномерного массива massiv2 и используемый для вставки очередной строки на второй лист;
  • txt1 – сюда копируются через разделитель значения элементов массива massiv1, предназначенные для заполнения очередной строки на втором листе;
  • n1 – количество строк в исходной таблице;
  • n2 – количество столбцов в исходной таблице;
  • n3 – номер текущей строки на втором листе;
  • n4 – количество столбцов текущей строки на втором листе (соответствует количеству элементов массива massiv2);
  • i1, i2, i3 – счетчики цикла For… Next;
  • gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.

Переменные, использующиеся более чем в одной процедуре, объявлены как глобальные в разделе Declarations программного модуля.

6 комментариев для “VBA Excel. Копирование данных с одного листа на другой”

Классно! Авторам — уважение! Толково, без соплей, со знанием дела.
Можете подсказать синтаксис такой проблемы: таблица 10 строк, 8 столбцов, если первая ячейка не пустая, скопировать на другой лист этой книги, а лучше — в отдельную книгу всю строку таблицы. Потом то же самое со строкой ниже, и так до последней. Потом пустые строки надо скрыть.
Это сложно?
Заранее спасибо за ответ.

Привет, Илья!
Для диапазона A1:H10:

Здравствуйте, Евгений! Огромное Вам спасибо! Потраченное время и желание помочь дорогого стОит, это большая редкость в наше время, поверьте. Ваш макрос — не совсем то, что мне нужно (например, новую книгу открывать не нужно, она уже есть, нужно просто на неё (и нужный лист) сослаться). Месторасположение ячеек в книгах не совпадает, строки тоже (27-я строка первой книги вставляется в 6-ю второй, т.е., например D27 в E6). И самое главное — вторая книга заполняется с нарастающим итогом. Т.е с первой книги берутся данные, вносятся во вторую, потом первая заполняется по новой, эти данные вносятся во вторую, но уже ниже и т.д.
Но, в любом случае, огромное спасибо, Вы дали направление, куда двигаться, буду думать ):

Добрый день, Евгений!
Существует способ автоматической передачи (копирования) данных из одного файла эксель в другой методом =…
А метод автоматической передачи (копирования) цвета имеется?
Подскажите пожалуйста!

Источник

VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)

Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.

Метод Range.Cut

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена.

Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.

Метод Range.Copy

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена.

Метод Worksheet.Paste

Синтаксис

Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект.
Link Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию).

В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.

Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).

Примеры

Вырезание и вставка диапазона одной строкой (перемещение):

Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Копирование и вставка диапазона одной строкой:

Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:

43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”

Странно, что не рассмотрено копирование ячеек, которые Cells.
Например, следующая строка копирует ячейку A1 в B2

а эта делает тоже самое, но демонстрирует,
как можно добавить размер и смещение:

Здравствуйте!
Скажите, как можно копировать на Лист 1, а вставить на Лист 2 диапазон ячеек целиком, либо отсортированный по 1 признаку диапазон(например по какому-то определенному значению, скажем, числу «500» в одном столбце Листа 1)?

Привет, Максим!
Вот пример сортировки таблицы по значению 500 в первом столбце на «Лист6» и копирования диапазона с «Лист6» на «Лист4» :

Спасибо большое, только я, наверно, неправильно описал ситуацию.
Сперва из эталонной таблицы Лист 1 копируем весь список на существующий Лист4.
Затем, пропускаем шапку, и, начиная со строки7, уже на Лист4 ищем строку, у которой в столбце 5 стоит число 500.
Вырезаем эту строку и вставляем на позицию строки 7. т.е первая после шапки.
Ищем следующую строку — вырезаем, потом вставляем на позицию строки 7+1=8 и т.д.
В итоге оставим только те строки, у которых в столбце 5 стоит число «500», остальные удаляются строки.

(пробовал менять местами строки в предыдущем коде, ошибок нет, копирует, переходит на лист 4, но строки на нем не удаляет, циклы пошагово проходят, но ничего не изменяется.)

Источник

Метод Sheets.Copy (Excel)

Копирует лист в другое место в книге.

Синтаксис

expression. Копирование (до, после)

выражение: переменная, представляющая объект Sheets.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Before Необязательный Variant Лист, перед которым будет размещен скопированный лист. Невозможно указать параметр Before , если указать After.
After Необязательный Variant Лист, после которого будет размещен скопированный лист. Вы не можете указать After , если укажем значение До.

Замечания

Если не указать значение «До» или «После», Microsoft Excel создает новую книгу, содержащую скопированный лист.

Пример

В этом примере выполняется копирование Sheet1, помещая его после Sheet3.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Решение задачи по копированию данных с одного листа на другой без использования и с использованием массивов. Вызов из кода VBA Excel других процедур.

Условие задачи по копированию данных

На одном листе расположен список повторяющихся городов с информацией о предприятиях общепита:

Исходная таблица задания №1

Исходная таблица задания №1

Необходимо данные по каждому городу перенести в одну строку на другом листе (таблица обрезана справа):

Часть результирующего списка задания №1

Часть результирующего списка задания №1

Решение копированием с листа на лист

Это решение значительно проще, чем с использованием массивов, но более медленное. При больших объемах информации обработка может длиться достаточно долго. Решение достигается путем присваивания значений ячеек из таблицы первого листа ячейкам второго листа.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Sub Resheniye1()

Dim n1 As Long, n2 As Long, n3 As Long, n4 As Long, _

i1 As Long, gorod As Variant

n1 = Sheets(«Лист1»).Cells(1, 1).CurrentRegion.Rows.Count

  For i1 = 1 To n1

    With Sheets(«Лист1»)

      If gorod <> .Cells(i1, 1) Then

        gorod = .Cells(i1, 1)

        n2 = 1

        n3 = n3 + 1

        n4 = 1

      Else

        n2 = 2

      End If

      Do While .Cells(i1, n2) <> «»

        Sheets(«Лист2»).Cells(n3, n4) = .Cells(i1, n2)

        n4 = n4 + 1

        n2 = n2 + 1

      Loop

    End With

  Next

End Sub

Переменные:

  • n1 – количество строк в исходной таблице;
  • n2 – номер столбца текущей ячейки исходной таблицы, к которой обращается цикл;
  • n3 – номер строки текущей ячейки на втором листе;
  • n4 – номер столбца текущей ячейки на втором листе;
  • i1 – счетчик цикла For… Next;
  • gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.

Решение с использованием массивов

Циклы в массивах работают очень быстро, но решение с ними может быть сложнее, чем при простом присваивании значений одних ячеек другим. В этом примере для упрощения кода две процедуры записаны отдельно и в нужные моменты вызываются для исполнения.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

‘Объявление глобальных переменных

‘в разделе Declarations

Dim massiv1 As Variant, n2 As Long, _

n3 As Long, i1 As Long, txt1 As Variant

‘Исполняемая процедура для решения

‘задания вторым способом

Sub Resheniye2()

Dim n1 As Long, gorod As Variant

With Sheets(«Лист1»).Cells(1, 1)

    massiv1 = .CurrentRegion

    n1 = .CurrentRegion.Rows.Count

    n2 = .CurrentRegion.Columns.Count

End With

n3 = 0

txt1 = «»

  For i1 = 1 To n1

    If gorod <> massiv1(i1, 1) Then

      If txt1 <> «» Then

        Call Vstavka

      End If

        gorod = massiv1(i1, 1)

        txt1 = massiv1(i1, 1)

        Call Kopirovanie

    Else

        Call Kopirovanie

    End If

    If i1 = n1 Then

        Call Vstavka

    End If

  Next

End Sub

‘Копирование данных из массива в

‘строковую переменную через разделитель

Sub Kopirovanie()

Dim i2 As Long

  For i2 = 2 To n2

    If massiv1(i1, i2) <> Empty Then

      txt1 = txt1 & «|» & massiv1(i1, i2)

    End If

  Next

End Sub

‘Обработка данных из строковой

‘переменной в дополнительных массивах и

‘вставка очередной строки на второй лист

Sub Vstavka()

Dim n4 As Long, massiv2 As Variant, _

massiv3 As Variant, i3 As Long

n3 = n3 + 1

massiv2 = Split(txt1, «|»)

n4 = UBound(massiv2)

ReDim massiv3(0 To 0, 0 To n4)

  For i3 = 0 To n4

    massiv3(0, i3) = massiv2(i3)

  Next

Sheets(«Лист2»).Range(Cells(n3, 1), _

Cells(n3, n4 + 1)).Value = massiv3

End Sub

Подпрограммы Kopirovanie и Vstavka используются в цикле For... Next процедуры Resheniye2 по два раза, поэтому их коды вынесены за пределы процедуры Resheniye2 и вызываются по мере необходимости.

Переменные:

  • massiv1 – его элементам присваиваются значения ячеек исходной таблицы;
  • massiv2 – одномерный массив, заполняемый данными из переменной txt1;
  • massiv3 – двумерный массив, заполняемый данными из одномерного массива massiv2 и используемый для вставки очередной строки на второй лист;
  • txt1 – сюда копируются через разделитель значения элементов массива massiv1, предназначенные для заполнения очередной строки на втором листе;
  • n1 – количество строк в исходной таблице;
  • n2 – количество столбцов в исходной таблице;
  • n3 – номер текущей строки на втором листе;
  • n4 – количество столбцов текущей строки на втором листе (соответствует количеству элементов массива massiv2);
  • i1, i2, i3 – счетчики цикла For… Next;
  • gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.

Переменные, использующиеся более чем в одной процедуре, объявлены как глобальные в разделе Declarations программного модуля.


How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this, including across worksheets and workbooks.

Sections:

Simple Copy/Paste

Copy Entire Range

Copy between Worksheets

Copy between Workbooks

Notes

Simple Copy/Paste

Range("A1").Copy Range("B1")

This copies cell A1 to cell B1.

Range(«A1»).Copy is the part that copies the cell.

Range(«B1») is the cell where the data will be copied.

This is a simple one line piece of code and it’s very easy to use.

Notice that there is a space between these two parts of the code.

Copy Entire Range

Range("A1:A5").Copy Range("B1:B5")

Range(«A1:A5»).Copy is the part that copies the range.

Range(«B1:B5») is the range where the data will be copied.

You can also write it like this:

Range("A1:A5").Copy Range("B1")

Notice that the range to where you will copy the data has only a reference to cell B1.

You only have to reference the very first cell to which the range will be copied and the entire range will copy in the cells below there.

NOTE: if you do it like this, you may end up overwriting data and Excel will not give you a warning about this; the data will simply be filled down as far as it needs to go to copy the first range.

Copy between Worksheets

Sheets("Sheet1").Range("A1").Copy Sheets("Sheet2").Range("B1")

This follows the same pattern as the above examples except that we need to tell the macro from which sheet we want to get the data and to which sheet we want to copy the data.

Sheets(«Sheet1»). is placed in front of the first range and that means to get the data from Sheet1, which is the name of a worksheet in the workbook.

Sheets(«Sheet2»). is placed in front of the range to which we want to copy the data and Sheet2 is the name of the worksheet where the data will be copied.

Copy between Workbooks

Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet1").Range("A1").Copy Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet3").Range("A1")

Here, we follow the above examples and, this time, add a reference to the workbooks from which we want to get the data and to which we want to place the data.

Workbooks(«Copy and Paste Data using Macro VBA in Excel.xlsm»). is the code that says in which workbook we want to place the data. Copy and Paste Data using Macro VBA in Excel.xlsm is the name of the workbook. In this example I used this for both parts, the workbook from which the data comes and where it goes. This allows you to run this macro within a single workbook and still show you how it works. In a real-world example, the first part contains the name of the workbook where you get the data from and the second contains the name of the workbook where you want to place the data.

Read this tutorial to copy values from another workbook, even if it’s closed.

Notes

All examples in the attached workbook have been commented out. Simply remove the single quote from the line of code you want to test and then run the macro.

cf5e0ebf6d62c9ec73df03c55f727e77.jpg

Download the attached file to get these examples in Excel.

Similar Content on TeachExcel

Activate or Navigate to a Worksheet using Macros VBA in Excel

Tutorial: Make a particular worksheet visible using a macro in Excel.
This is called activating a wo…

Get the Name of a Worksheet in Macros VBA in Excel

Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

Get the Last Row using VBA in Excel

Tutorial:
(file used in the video above)
How to find the last row of data using a Macro/VBA in Exce…

Remove Dashed Lines from Copy Paste VBA in Excel

Tutorial: How to remove the flashing dashes from a copy/paste range using VBA in Excel; this removes…

Copy one range and paste in another range

Tutorial: Below is a macro, just copy and paste it into a module in your workbook and go from there…

Guide to Combine and Consolidate Data in Excel

Tutorial: Guide to combining and consolidating data in Excel. This includes consolidating data from …

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

1

Excel

Копировать содержимое листа одной книги, на лист в новую книгу с присвоением ей имени листа из которого копировали

31.07.2019, 16:19. Показов 12978. Ответов 24


Студворк — интернет-сервис помощи студентам

Всем доброго дня!
Помогите пожалуйста написать код, сам не могу написать по причине отсутствия знаний.
Есть книга с именем «Заказы на производства». В ней имеются 3 листа, в каждом листе формируется бланк-заказа на то или иное производство.
Нужен код который копирует данные (значения и формат таблиц) с активного листа (без кода в модуле листа), и вставляет эти данные во вновь созданную книгу. Причем имя у книги соответствует имени листа из которого копировали данные. Новую книгу закрывать не нужно.

Наверное слишком запутанно все описал.
Очень надеюсь на помощь.



0



Остап Бонд

Заблокирован

31.07.2019, 17:15

2

Ivanov_Sergey, примерно так —

Visual Basic
1
2
3
4
5
sub AAAAAAAAAAAA
n=activesheet.name
activesheet.copy
activeworkbook.saveas n & ".xlsb"
end sub



0



0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

31.07.2019, 17:23

 [ТС]

3

Доброго дня, Остап!
Дело в том, что в предложенном Вами варианте, копируются данные с листа, а заодно и код прописанный в коде листа, книги из которой копируем. Мне это не подходит, так как при малейшем изменении в листе созданной книги, возникают ошибки.

Надеюсь есть решение…
Спасибо



0



Остап Бонд

Заблокирован

31.07.2019, 17:37

4

Ivanov_Sergey, вот вынудили вы меня открывать excel, в гугл лезть за константой

Visual Basic
1
2
3
4
5
Sub AAAAAAAAAAAA()
n = ActiveSheet.Name
ActiveSheet.Copy
ActiveWorkbook.SaveAs n & ".xlsx", xlWorkbookNormal
End Sub



0



0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

31.07.2019, 18:00

 [ТС]

5

Остап, мне очень жаль что я достаю своими глупыми пожеланиями и вопросами.
Но к сожалению, и данный вариант не привел к положительному результату.
Код с копировался вместе с данными.
А можно просто методом выделения диапазона, скопировать все в новую книгу?

Спасибо.

Добавлено через 10 минут

Всем доброго дня!
Помогите пожалуйста написать код, сам не могу написать по причине отсутствия знаний.
Есть книга с именем «Заказы на производства». В ней имеются 3 листа, в каждом листе формируется бланк-заказа на то или иное производство.
Нужен код который копирует данные (значения и формат таблиц) с активного листа (без кода в модуле листа), и вставляет эти данные во вновь созданную книгу. Причем имя у книги соответствует имени листа из которого копировали данные. Новую книгу закрывать не нужно.

Наверное слишком запутанно все описал.
Очень надеюсь на помощь.

Burk, приветствую! Может быть Вы сможете помочь в решении?!



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

31.07.2019, 18:33

6

Ivanov_Sergey, Вы зря отказываетесь от идеи Остапа

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Test()
    Application.DisplayAlerts = False
    ActiveSheet.Copy
    With ActiveWorkbook
         .SaveAs .ActiveSheet.Name & ".xlsx", xlOpenXMLWorkbook
         .Close False
    End With
    Application.DisplayAlerts = True
End Sub



0



Burk

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

31.07.2019, 18:35

7

Ivanov_Sergey, считаем, что открыты исходная номер 1 и новая Книга под номером 2. Тогда должно сработать так (копируем только значения

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub ValueOnly()
'
    Workbooks(1).Activate
    n = ActiveWorkbook.Name
    Cells.Select: Selection.Copy
    Workbooks(2).Activate
    [A1].Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
ActiveWorkbook.SaveAs n & ".xlsx", xlWorkbookNormal
End Sub

Кстати, я вам ведь писал про макререкодер, почему бы вам не попытаться сделать при его поиощи ,



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

31.07.2019, 18:35

8

Цитата
Сообщение от Ivanov_Sergey
Посмотреть сообщение

Новую книгу закрывать не нужно.

Пока её не закроете, в модуле листа будут жить макросы. Потом исчезнут, ибо в файлах «.xlsx» они не живут.



0



Ivanov_Sergey

0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

31.07.2019, 18:39

 [ТС]

9

Pashulka, Burk приветствую вас!
Я даже не проверяя код)) уверен что все сработает))
Я тут старался, пробовал сам сделать, вот что вышло. Работает!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub VigruzkaZakaza()
 
Application.ScreenUpdating = False
 Dim New_Wb As Workbook
    Set New_Wb = Workbooks.Add
    New_Wb.Activate
    New_Wb.SaveAs ("D:" & ThisWorkbook.ActiveSheet.Range("A1") & ".xls")
    'New_Wb.Close
    
'êîïèðóþ äàííûå ñ ëèñòà
    Workbooks("Çàêàçû-ïðîèçâîäñòâà.xlsm").Activate
    ActiveSheet.Cells.Copy
    'Cells.Select
'Selection.Copy
  Workbooks("Áëàíê-Çàêàç.xls").Activate
    Cells.Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
Application.ScreenUpdating = True
        
End Sub

Добавлено через 48 секунд
что это? Комментарии как то странно отобразились((



0



0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

31.07.2019, 18:43

 [ТС]

10

Уважаемые программисты, у меня не выходит каменный цветок. Не могу правильно код вставить в переписку, криво отображается. Вот скрин кода прикрепляю. Извиняюсь

Миниатюры

Копировать содержимое листа одной книги, на лист в новую книгу с присвоением ей имени листа из которого копировали
 



0



0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

31.07.2019, 18:50

 [ТС]

11

Burk, вот сделал код с его помощью

Кстати, я вам ведь писал про макререкодер, почему бы вам не попытаться сделать при его поиощи

Добавлено через 4 минуты

Пока её не закроете, в модуле листа будут жить макросы. Потом исчезнут, ибо в файлах «.xlsx» они не живут.

Попробовал код запустить, но опять вылетела ошибка. Файл (новая книга) не закрылась



0



Burk

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

31.07.2019, 18:57

12

Ivanov_Sergey, 4 строка неправильно записана, надо так

Visual Basic
1
n = ActiveWorkbook.Sheets(1).Name

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



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

31.07.2019, 19:02

13

Цитата
Сообщение от Ivanov_Sergey
Посмотреть сообщение

Попробовал код запустить, но опять вылетела ошибка. Файл (новая книга) не закрылась

Почему опять ? Раньше Вы про ошибку не говорили. Впрочем, папку для сохранения лучше указать явно, но даже сейчас — ошибки быть не должно.



0



Ivanov_Sergey

0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

31.07.2019, 19:03

 [ТС]

14

Burk, огромное спасибо. А Вы можете в мой код вживить свой код.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub VigruzkaZakaza()
 
    Application.ScreenUpdating = False
    Dim New_Wb As Workbook
    Set New_Wb = Workbooks.Add
    New_Wb.Activate
    New_Wb.SaveAs ("D:" & ThisWorkbook.ActiveSheet.Range("A1") & ".xls")
    
'   копирую данные с листа
 
    Workbooks("Заказы-производства.xlsm").Activate
    ActiveSheet.Cells.Copy
    Workbooks("Бланк-Заказ.xls").Activate
    Cells.Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
        
End Sub

Добавлено через 1 минуту
предположим что у меня открыта только одна книга — «Заказы-производства.xlsm»



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

31.07.2019, 19:15

15

Ivanov_Sergey, так что у вас в «Заказы-производства.xlsm» в ячейке А1 находится имя будущего файла???
Вроде речь шла о имя нового файла = имя листа в старом



0



Ivanov_Sergey

0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

31.07.2019, 19:22

 [ТС]

16

Burk, Вы абсолютно правы! Эту часть кода надо сносить.
И еще один момент. Название новой книги нужно присвоить такое же как название листа, из котого копируем данные.

Visual Basic
1
n=ActiveWorkSheet.Name

Добавлено через 2 минуты
Что то я делаю не так(((

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub VigruzkaZakaza()
 
    Application.ScreenUpdating = False
    Dim New_Wb As Workbook
    Set New_Wb = Workbooks.Add
    New_Wb.Activate
    n = ActiveWorksheets.Name
    New_Wb.SaveAs ("D:" & n & ".xls")
    
'   копирую данные с листа
 
    Workbooks("Заказы-производства.xlsm").Activate
    
    Cells.Select: Selection.Copy
    Workbooks("Бланк-Заказ.xls").Activate
    [a1].Select
'   ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWorkbook.SaveAs n & ".xlsx", xlWorkbookNormal
 
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
        
End Sub



0



Burk

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

31.07.2019, 19:48

17

Лучший ответ Сообщение было отмечено Ivanov_Sergey как решение

Решение

Если не нужно убирать возможные формулы на листе, то можно так, только разберитесь в именем новой книги, эта строка сейчас закомментирована. Если формулы листа не нужны, то раскомментировать две строки с PasteSpecial

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub VigruzkaZakaza()
 
    Application.ScreenUpdating = False
    Dim New_Wb As Workbook
    Set New_Wb = Workbooks.Add
 '   копирую данные с листа
    Workbooks("Заказы-производства.xlsm").Activate
    n = ActiveWorkbook.Sheets(1).Name
    ActiveSheet.Cells.Copy
    New_Wb.Activate
    [A1].Select: ActiveSheet.Paste
    Application.CutCopyMode = False
'    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'        :=False, Transpose:=False
 
'    New_Wb.SaveAs ("D:" & ThisWorkbook.ActiveSheet.Range("A1") & ".xls")
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
        
End Sub

это для загруженного основного файла



1



0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

31.07.2019, 19:56

 [ТС]

18

Попробовал снять галочки с этих строк:

‘ Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
‘ :=False, Transpose:=False

Выдает ошибку (см. скрин)

Миниатюры

Копировать содержимое листа одной книги, на лист в новую книгу с присвоением ей имени листа из которого копировали
 



0



0 / 0 / 0

Регистрация: 23.07.2019

Сообщений: 27

31.07.2019, 19:58

 [ТС]

19

Burk. Название файла делаем как название листа, из которого копируем



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

31.07.2019, 20:01

20

строку 12 уберите, пропустил



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

31.07.2019, 20:01

20

 

VistaSV30

Пользователь

Сообщений: 70
Регистрация: 21.11.2014

#1

08.10.2015 09:08:51

Добрый день!
Нужно скопировать данные с листа А на лист Б, при этом  не переходя на лист Б
Одну ячейку скопировать получилось. А вот диапазон пока не могу.

Код
Sub Кн_Архив()
Dim Ar As Range

 Set Ar = Worksheets("Б").Range("A1")
  
   Range("А1").Select 
   Selection.Copy
   Range(Ar.Cells(1, 1)).Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 

End Sub

Спасибо!

Изменено: VistaSV3008.10.2015 09:10:21

<#0>

 

yoozhik

Пользователь

Сообщений: 239
Регистрация: 01.01.1970

#2

08.10.2015 09:28:52

Код
Sub Кн_Архив()
Dim Ar As Range
 Set Ar = Worksheets("Б").Range("A1")
[A1:B6].Copy Destination:=Ar
End Sub
 

VistaSV30

Пользователь

Сообщений: 70
Регистрация: 21.11.2014

Спасибо, скопировать получилось!
Подскажите еще как скопировать только значения, а не формулы

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#4

08.10.2015 09:43:01

Ну из двух сделайте один макрос. И зачем эти навороты с Set Ar…?

Код
Sub Кн_Архив()
    [A1:B6].Copy
    Worksheets("Б").Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub
'или вариант с CodeName
Sub Кн_Архив()
    [A1:B6].Copy
    Лист2.[A1].PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub

Изменено: Sanja08.10.2015 09:47:00

Согласие есть продукт при полном непротивлении сторон.

 

VistaSV30

Пользователь

Сообщений: 70
Регистрация: 21.11.2014

Спасибо, Sanja. Сделал как Вы посоветовали

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

#6

08.10.2015 10:12:52

Ещё вариант в одну строку (можно написать ещё чуть короче)

Код
Sub tt(): Sheets("Į").[a1:b6].Value = [a1:b6].Value: End Sub

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Копирование с картинками в word
  • Копирование с использованием ссылок excel
  • Копирование рисунка в ячейку excel
  • Копирование расчетов ячеек excel
  • Копирование рабочего листа excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии