Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Скопировать скрытый лист и занести данные из другого - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Скопировать скрытый лист и занести данные из другого (Макросы/Sub)
Скопировать скрытый лист и занести данные из другого
xaser Дата: Суббота, 11.04.2015, 12:45 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Приветствую.

Такой вопрос: имеется файл с 2 листами, данные и шаблон (скрытый). Как составить макрос так, чтобы по клику на кнопку (в первом листе) создавалась копия шаблона (не скрытая), в которую нужно скопировать некоторые столбцы из первого листа.

Например (см. в аттаче) нужно копировать данные из столбцов col1 и col3 в newcol1 и newcol3 соответственно.
К сообщению приложен файл: task2.xlsx (13.4 Kb)


Сообщение отредактировал xaser - Суббота, 11.04.2015, 12:47
 
Ответить
СообщениеПриветствую.

Такой вопрос: имеется файл с 2 листами, данные и шаблон (скрытый). Как составить макрос так, чтобы по клику на кнопку (в первом листе) создавалась копия шаблона (не скрытая), в которую нужно скопировать некоторые столбцы из первого листа.

Например (см. в аттаче) нужно копировать данные из столбцов col1 и col3 в newcol1 и newcol3 соответственно.

Автор - xaser
Дата добавления - 11.04.2015 в 12:45
Manyasha Дата: Суббота, 11.04.2015, 14:07 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
xaser, здравствуйте. Как-то так:[vba]
Код
Private Sub CommandButton1_Click()
      With Sheets("Данные")
          lr = Cells(.Rows.Count, 6).End(xlUp).Row
          Set myRng = .Range("F9:H" & lr)
      End With
      With Sheets("Шаблон")
          .Range("E13:G" & lr + 4) = myRng.Value
          .Cells.Copy Sheets("Данные").[a1]
          .Range("E13:G" & lr + 4).Clear
      End With
End Sub
[/vba]
Если честно, мне самой не нравится то, что я написала! XD
Код требует знания левых верхних координат диапазонов на обоих листах. А еще, что называется влоб прописано кол-во столбцов, которые будут скопированы, да и вообще какой-то некрасивый макрос получился, но зато работает. :)
[p.s.]Любая критика в мой адрес со стороны экспертом VBA принимается с удовольствием![/p.s.]
К сообщению приложен файл: task2_1.xlsm (20.4 Kb)


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Суббота, 11.04.2015, 14:08
 
Ответить
Сообщениеxaser, здравствуйте. Как-то так:[vba]
Код
Private Sub CommandButton1_Click()
      With Sheets("Данные")
          lr = Cells(.Rows.Count, 6).End(xlUp).Row
          Set myRng = .Range("F9:H" & lr)
      End With
      With Sheets("Шаблон")
          .Range("E13:G" & lr + 4) = myRng.Value
          .Cells.Copy Sheets("Данные").[a1]
          .Range("E13:G" & lr + 4).Clear
      End With
End Sub
[/vba]
Если честно, мне самой не нравится то, что я написала! XD
Код требует знания левых верхних координат диапазонов на обоих листах. А еще, что называется влоб прописано кол-во столбцов, которые будут скопированы, да и вообще какой-то некрасивый макрос получился, но зато работает. :)
[p.s.]Любая критика в мой адрес со стороны экспертом VBA принимается с удовольствием![/p.s.]

Автор - Manyasha
Дата добавления - 11.04.2015 в 14:07
Leanna Дата: Суббота, 11.04.2015, 14:23 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Я лист копировала и в него уже данные вставляла.
[vba]
Код
Private Sub CommandButton1_Click()
     Sheets("Шаблон").Visible = xlSheetVisible
     Sheets("Шаблон").Copy after:=Sheets(Sheets.Count)
     Sheets("Шаблон").Visible = xlSheetHidden
     lr = Sheets("Данные").Cells(Rows.Count, "F").End(xlUp).Row
     Sheets("Данные").Range("F9", "F" & lr).Copy Sheets(Sheets.Count).Range("E13")
     Sheets("Данные").Range("H9", "H" & lr).Copy Sheets(Sheets.Count).Range("G13")
End Sub
[/vba]
К сообщению приложен файл: task2.xlsm (23.7 Kb)


Лучше день потерять, потом за пять минут долететь!
 
Ответить
СообщениеЯ лист копировала и в него уже данные вставляла.
[vba]
Код
Private Sub CommandButton1_Click()
     Sheets("Шаблон").Visible = xlSheetVisible
     Sheets("Шаблон").Copy after:=Sheets(Sheets.Count)
     Sheets("Шаблон").Visible = xlSheetHidden
     lr = Sheets("Данные").Cells(Rows.Count, "F").End(xlUp).Row
     Sheets("Данные").Range("F9", "F" & lr).Copy Sheets(Sheets.Count).Range("E13")
     Sheets("Данные").Range("H9", "H" & lr).Copy Sheets(Sheets.Count).Range("G13")
End Sub
[/vba]

Автор - Leanna
Дата добавления - 11.04.2015 в 14:23
Manyasha Дата: Суббота, 11.04.2015, 15:37 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Вот переделала! Теперь намного лучше:

Перед запуском макроса нужно выделить диапазон, который необходимо скопировать.

Елена, у Вас не копируется 2-й столбик (G). А так, идея копировать шаблон на новый лист, вместо того, чтобы копировать данные туда-сюда, а потом еще и очищать (как у меня сделано), мне нравится. :) Можно совместить с моим макросом, тогда совсем будет хорошо.
К сообщению приложен файл: task2_2.xlsm (21.2 Kb)


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Суббота, 11.04.2015, 15:37
 
Ответить
СообщениеВот переделала! Теперь намного лучше:

Перед запуском макроса нужно выделить диапазон, который необходимо скопировать.

Елена, у Вас не копируется 2-й столбик (G). А так, идея копировать шаблон на новый лист, вместо того, чтобы копировать данные туда-сюда, а потом еще и очищать (как у меня сделано), мне нравится. :) Можно совместить с моим макросом, тогда совсем будет хорошо.

Автор - Manyasha
Дата добавления - 11.04.2015 в 15:37
xaser Дата: Суббота, 11.04.2015, 15:42 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Manyasha
Дебагер ругается на эту строчку
[vba]
Код
.Cells.Copy Sheets("Данные").[a1]
[/vba]
пишет недостаточно ресурсов, после чего эксель крашится :)

Leanna, работает
А можно указать имя нового листа при копировании и копировать только данные, форматирование не трогать?


Сообщение отредактировал xaser - Суббота, 11.04.2015, 15:43
 
Ответить
СообщениеManyasha
Дебагер ругается на эту строчку
[vba]
Код
.Cells.Copy Sheets("Данные").[a1]
[/vba]
пишет недостаточно ресурсов, после чего эксель крашится :)

Leanna, работает
А можно указать имя нового листа при копировании и копировать только данные, форматирование не трогать?

Автор - xaser
Дата добавления - 11.04.2015 в 15:42
Leanna Дата: Суббота, 11.04.2015, 15:54 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Подправила.
А второй столбец на копировать или нет? У меня первый и третий копируются.
К сообщению приложен файл: task3.xlsm (24.6 Kb)


Лучше день потерять, потом за пять минут долететь!
 
Ответить
СообщениеПодправила.
А второй столбец на копировать или нет? У меня первый и третий копируются.

Автор - Leanna
Дата добавления - 11.04.2015 в 15:54
RAN Дата: Суббота, 11.04.2015, 15:55 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Leanna, при наличии скрытых листов с этим
[vba]
Код
Sheets("Шаблон").Copy after:=Sheets(Sheets.Count)
[/vba]
могут возникнуть проблемы
Лучше так
[vba]
Код
Private Sub CommandButton1_Click()
      Sheets("Шаблон").Copy Before:=Sheets(1)
      Sheets(1).Visible = xlSheetVisible
      Sheets(1).Activate ' по желанию, но не обязательно
      With Sheets("Данные")
      lr = .Cells(.Rows.Count, "F").End(xlUp).Row
      .Range("F9", "F" & lr).Copy Sheets(1).Range("E13")
      .Range("H9", "H" & lr).Copy Sheets(1).Range("G13")
      End With
End Sub
[/vba]

[p.s.]Точнее, не с самим копированием, а с последующей вставкой.[/p.s.]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 11.04.2015, 15:56
 
Ответить
СообщениеLeanna, при наличии скрытых листов с этим
[vba]
Код
Sheets("Шаблон").Copy after:=Sheets(Sheets.Count)
[/vba]
могут возникнуть проблемы
Лучше так
[vba]
Код
Private Sub CommandButton1_Click()
      Sheets("Шаблон").Copy Before:=Sheets(1)
      Sheets(1).Visible = xlSheetVisible
      Sheets(1).Activate ' по желанию, но не обязательно
      With Sheets("Данные")
      lr = .Cells(.Rows.Count, "F").End(xlUp).Row
      .Range("F9", "F" & lr).Copy Sheets(1).Range("E13")
      .Range("H9", "H" & lr).Copy Sheets(1).Range("G13")
      End With
End Sub
[/vba]

[p.s.]Точнее, не с самим копированием, а с последующей вставкой.[/p.s.]

Автор - RAN
Дата добавления - 11.04.2015 в 15:55
xaser Дата: Суббота, 11.04.2015, 16:02 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Leanna, все верно 1й и 3й, хотя не обязательно (т.е суть в том что не весь лист целиком копируется)
А под указанием имени я имел ввиду как это в макросе прописать, что бы всегда одинаковым было, например "результат", ну тут сам разберусь уже.


Сообщение отредактировал xaser - Суббота, 11.04.2015, 16:05
 
Ответить
СообщениеLeanna, все верно 1й и 3й, хотя не обязательно (т.е суть в том что не весь лист целиком копируется)
А под указанием имени я имел ввиду как это в макросе прописать, что бы всегда одинаковым было, например "результат", ну тут сам разберусь уже.

Автор - xaser
Дата добавления - 11.04.2015 в 16:02
Leanna Дата: Суббота, 11.04.2015, 16:09 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Подправила учитывая замечания RAN.
Тогда при нажатии старый лист "результат" удаляется(если он существовал), а новый копируется с шаблона.
К сообщению приложен файл: task4.xlsm (25.4 Kb)


Лучше день потерять, потом за пять минут долететь!
 
Ответить
СообщениеПодправила учитывая замечания RAN.
Тогда при нажатии старый лист "результат" удаляется(если он существовал), а новый копируется с шаблона.

Автор - Leanna
Дата добавления - 11.04.2015 в 16:09
RAN Дата: Суббота, 11.04.2015, 16:23 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sheets(shName)
[/vba]
Стереотипы? :)
Какая разница, как его обозвать, если мы его вставили первым?


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sheets(shName)
[/vba]
Стереотипы? :)
Какая разница, как его обозвать, если мы его вставили первым?

Автор - RAN
Дата добавления - 11.04.2015 в 16:23
Manyasha Дата: Суббота, 11.04.2015, 19:24 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Я не сдамся :) Вот поправила свой вариант, копирует все также выделенный фрагмент, только теперь можно копировать и несвязные диапазоны (невнимательно прочитала задание сначала). Нужно только задать диапазоны шапочек (см. ctrl+f3)
К сообщению приложен файл: task2_3.xlsm (22.9 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеЯ не сдамся :) Вот поправила свой вариант, копирует все также выделенный фрагмент, только теперь можно копировать и несвязные диапазоны (невнимательно прочитала задание сначала). Нужно только задать диапазоны шапочек (см. ctrl+f3)

Автор - Manyasha
Дата добавления - 11.04.2015 в 19:24
RAN Дата: Суббота, 11.04.2015, 19:36 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Я не сдамся

Похвально! hands
Одно "но"!
Шаблон, он на то и шаблон, чтобы с бубном не плясать. yes


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Я не сдамся

Похвально! hands
Одно "но"!
Шаблон, он на то и шаблон, чтобы с бубном не плясать. yes

Автор - RAN
Дата добавления - 11.04.2015 в 19:36
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Скопировать скрытый лист и занести данные из другого (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!