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

Вход

Регистрация

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

 

= Мир MS Excel/Автоматическая вставка таблиц - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Автоматическая вставка таблиц
Lars Дата: Среда, 06.06.2012, 22:15 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте! Прошу помощи.
Имеется файл эксель (приложил для ясности), где на листе "Фундамент" находятся "таблицы" с данными. Необходимо создать кнопку, по нажатию которой вставлялись бы новые аналогичные "таблицы". Знаний хватает на создание макроса вставки строк, а вот создать такой макрос - не хватает знаний. Это вообще реально и как можно реализовать? Заранее спасибо.
К сообщению приложен файл: --__-.xlsx (28.1 Kb)


Сообщение отредактировал Lars - Среда, 06.06.2012, 22:47
 
Ответить
СообщениеЗдравствуйте! Прошу помощи.
Имеется файл эксель (приложил для ясности), где на листе "Фундамент" находятся "таблицы" с данными. Необходимо создать кнопку, по нажатию которой вставлялись бы новые аналогичные "таблицы". Знаний хватает на создание макроса вставки строк, а вот создать такой макрос - не хватает знаний. Это вообще реально и как можно реализовать? Заранее спасибо.

Автор - Lars
Дата добавления - 06.06.2012 в 22:15
Lars Дата: Среда, 06.06.2012, 22:47 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Прикрепил файл, удалил ссылку. Извините smile
 
Ответить
СообщениеПрикрепил файл, удалил ссылку. Извините smile

Автор - Lars
Дата добавления - 06.06.2012 в 22:47
Hugo Дата: Среда, 06.06.2012, 22:57 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Не вполне поятно, что именно нужно.
Попробуйте из модуля листа "Фундамент" выполнить такой код:
[vba]
Code
Sub dobavitj_tablicu()
     Dim r As Range
     Set r = [a1:i29]
     r.Copy Range("E" & Rows.Count).End(xlUp).Offset(2, -4)
End Sub
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНе вполне поятно, что именно нужно.
Попробуйте из модуля листа "Фундамент" выполнить такой код:
[vba]
Code
Sub dobavitj_tablicu()
     Dim r As Range
     Set r = [a1:i29]
     r.Copy Range("E" & Rows.Count).End(xlUp).Offset(2, -4)
End Sub
[/vba]

Автор - Hugo
Дата добавления - 06.06.2012 в 22:57
Lars Дата: Среда, 06.06.2012, 23:13 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Сейчас попробую объяснить несколько понятнее.
На листе "Фундамент" имеются две таблицы (назовем их так) с данными по фундаментам (Фундамент ленточный, Фундамент сваи), такие вот аналоги карточки материала, где ведутся все расчеты и выясняется стоимость того или иного материала. Стоит задача создать на листе "Фундамент" кнопку, которая по нажатии, будет создавать точно такие же таблицы как "Фундамент ленточный" и "Фундамент сваи", но с пустыми значениями через ячейку от предыдущей.
 
Ответить
СообщениеСейчас попробую объяснить несколько понятнее.
На листе "Фундамент" имеются две таблицы (назовем их так) с данными по фундаментам (Фундамент ленточный, Фундамент сваи), такие вот аналоги карточки материала, где ведутся все расчеты и выясняется стоимость того или иного материала. Стоит задача создать на листе "Фундамент" кнопку, которая по нажатии, будет создавать точно такие же таблицы как "Фундамент ленточный" и "Фундамент сваи", но с пустыми значениями через ячейку от предыдущей.

Автор - Lars
Дата добавления - 06.06.2012 в 23:13
Hugo Дата: Четверг, 07.06.2012, 00:09 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

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

[vba]
Code
Sub dobavitj_tablicu()
       Dim r1 As Range, r2 As Range, r3 As Range, r4 As Range, tgt As Range
       Set r1 = [a1:e1]
       Set r2 = [a2:b11]
       Set r3 = [a12:d12]
       Set r4 = [e10:e12]
       Set tgt = Range("E" & Rows.Count).End(xlUp).Offset(2, -4)
       r1.Copy tgt
       r2.Copy tgt.Offset(1)
       r3.Copy tgt.Offset(11)
       r4.Copy tgt.Offset(9, 4)
End Sub
[/vba]

Или проще - на дополнительном листе заполняете диапазон таблицами без данных и используете весь этот один диапазон как форму для копирования. Как в первом варианте кода.
Только нужно указать лист:
[vba]
Code
Set r = sheets("формы").[a1:i29]
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНу тогда задайте сразу 8 или больше разных объектных переменных - на все постоянные значения и формулы суммирования, и раскопируйте их.
Примерно так - сделал для первой таблицы, продолжайте аналогично:

[vba]
Code
Sub dobavitj_tablicu()
       Dim r1 As Range, r2 As Range, r3 As Range, r4 As Range, tgt As Range
       Set r1 = [a1:e1]
       Set r2 = [a2:b11]
       Set r3 = [a12:d12]
       Set r4 = [e10:e12]
       Set tgt = Range("E" & Rows.Count).End(xlUp).Offset(2, -4)
       r1.Copy tgt
       r2.Copy tgt.Offset(1)
       r3.Copy tgt.Offset(11)
       r4.Copy tgt.Offset(9, 4)
End Sub
[/vba]

Или проще - на дополнительном листе заполняете диапазон таблицами без данных и используете весь этот один диапазон как форму для копирования. Как в первом варианте кода.
Только нужно указать лист:
[vba]
Code
Set r = sheets("формы").[a1:i29]
[/vba]

Автор - Hugo
Дата добавления - 07.06.2012 в 00:09
Lars Дата: Четверг, 07.06.2012, 00:15 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Благодарю за помощь! Очень сильно помогли!)
 
Ответить
СообщениеБлагодарю за помощь! Очень сильно помогли!)

Автор - Lars
Дата добавления - 07.06.2012 в 00:15
Lars Дата: Четверг, 07.06.2012, 00:52 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Hugo, да, простым вариантом все отлично работает. Добавил лист с формой, делаю с него копирование полей, на лист "Фундамент" повесил кнопку для выполнения макроса. По нажатии добавляются необходимые поля.
Правда, теперь есть к вам еще один вопрос, если не затруднит. При единичном нажатии кнопки - все работает, добавляются новые поля, как изначально и было необходимо. А можно ли как-нибудь сделать так, чтобы при повторном нажатии на кнопку, макрос добавлял снова такую же форму еще ниже, а не заменял предыдущую вставку?
Приложил файл с кнопкой, чтоб было понятнее.
К сообщению приложен файл: --__.xlsm (48.8 Kb)
 
Ответить
СообщениеHugo, да, простым вариантом все отлично работает. Добавил лист с формой, делаю с него копирование полей, на лист "Фундамент" повесил кнопку для выполнения макроса. По нажатии добавляются необходимые поля.
Правда, теперь есть к вам еще один вопрос, если не затруднит. При единичном нажатии кнопки - все работает, добавляются новые поля, как изначально и было необходимо. А можно ли как-нибудь сделать так, чтобы при повторном нажатии на кнопку, макрос добавлял снова такую же форму еще ниже, а не заменял предыдущую вставку?
Приложил файл с кнопкой, чтоб было понятнее.

Автор - Lars
Дата добавления - 07.06.2012 в 00:52
Hugo Дата: Четверг, 07.06.2012, 13:07 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Код так и задуман, но т.к. Вы изменили расположение данных, то нужно скорректировать и код.
Вот эта часть
[vba]
Code
Range("E" & Rows.Count).End(xlUp)
[/vba]определяет последнюю занятую ячейку в столбце E, а эта
[vba]
Code
.Offset(28, -4)
[/vba]сдвиг от этой ячейки (ну это уже поняли).
Т.к. в Е нет данных в этой новой форме, то есть смысл поменять код например так:
[vba]
Code
r.Copy Range("G" & Rows.Count).End(xlUp).Offset(3, -6)
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеКод так и задуман, но т.к. Вы изменили расположение данных, то нужно скорректировать и код.
Вот эта часть
[vba]
Code
Range("E" & Rows.Count).End(xlUp)
[/vba]определяет последнюю занятую ячейку в столбце E, а эта
[vba]
Code
.Offset(28, -4)
[/vba]сдвиг от этой ячейки (ну это уже поняли).
Т.к. в Е нет данных в этой новой форме, то есть смысл поменять код например так:
[vba]
Code
r.Copy Range("G" & Rows.Count).End(xlUp).Offset(3, -6)
[/vba]

Автор - Hugo
Дата добавления - 07.06.2012 в 13:07
Lars Дата: Четверг, 07.06.2012, 14:31 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Огромное спасибо за помощь! Все работает, новые поля добавляются, как того и требовалось.
Моей благодарности нет предела smile
 
Ответить
СообщениеОгромное спасибо за помощь! Все работает, новые поля добавляются, как того и требовалось.
Моей благодарности нет предела smile

Автор - Lars
Дата добавления - 07.06.2012 в 14:31
Валерий - shelesto@ya.ru Дата: Суббота, 13.04.2013, 17:47 | Сообщение № 10
Группа: Гости
Господа, а как в этом файле сделать, чтобы таблицы вставлялись не вниз, а справа. Как в этом коде указать, что таблицу нужно вставить в пустую строку СТРОКИ, а не СТОЛБЦА?
 
Ответить
СообщениеГоспода, а как в этом файле сделать, чтобы таблицы вставлялись не вниз, а справа. Как в этом коде указать, что таблицу нужно вставить в пустую строку СТРОКИ, а не СТОЛБЦА?

Автор - Валерий - shelesto@ya.ru
Дата добавления - 13.04.2013 в 17:47
  • Страница 1 из 1
  • 1
Поиск:

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