Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2013, 20:17   #1
Edvardstrannik
 
Регистрация: 01.04.2013
Сообщений: 3
Вопрос Макрос, который копирует строку с одного листа на другой с присвоением нумерации и даты

Здравствуйте господа программисты!
Столкнулся с непосильной задачей. Знания в написании макросов на уровне новичка, так что прошу помощи. Буду благодарен за любые советы.
Задача:
1) На первом листе(меню) расположены кнопки управления и поля для заполнения. эти поля нужно перенести во второй лист при нажатии кнопки "добавить договор в базу", задать номер по порядку в столбец "№ п/п" и проставить дату записи в столбец "дата добавления". Дату брать из часов ОС.
2) При нажатии на кнопку "удалить последний договор из базы" удалять в листе "договора" последнюю строку вместе с номером по порядку и датой добавления.
Вложения
Тип файла: rar Учет Договоров.rar (13.4 Кб, 91 просмотров)
Edvardstrannik вне форума Ответить с цитированием
Старый 01.04.2013, 22:11   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Я не нашел в вашем файле ни единой строки кода.

Вы предлагаете сделать всё за вас?
Как бы сделать-то несложно, но вы бы сами хоть что-то попробовали... примеров на форуме множество
EducatedFool вне форума Ответить с цитированием
Старый 02.04.2013, 13:19   #3
Edvardstrannik
 
Регистрация: 01.04.2013
Сообщений: 3
По умолчанию

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

Option Explicit

Private Sub cmdNewData_Click()
Dim vrngFrom As Variant
vrngFrom = Range("C10:K10")

With Sheets("Лист2")
Dim fc As Long
fc = .Cells(Rows.Count, 2).End(xlUp).Row + 1

.Cells(fc, 2).Resize(, 9).Value = vrngFrom
End With
End Sub

Но как сделать что бы он брал не С10 по К10 и переносил на второй лист непонятно куда, а брал B3 по G3 и переносил в последнюю строку листа "договора"... В смысле может есть у кого таблица с обозначением частей кода, дабы через неё уже подставлять и дорабатывать. Времени нету читать громоздкие книги по excel. Разберусь в коде я же выложу суда программу, я думаю не одному мне она пригодиться. Если не трудно выложите, или поделитесь ссылкой куда копать пожалуйста.
Вложения
Тип файла: rar 3489940.rar (12.9 Кб, 84 просмотров)
Edvardstrannik вне форума Ответить с цитированием
Старый 03.04.2013, 08:34   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Код написан для Excel-книги из сообщения #1.
Код заносит данные на второй лист.
На первом листе должны быть уже какие-нибудь данные, а не только заголовок таблицы.

Код:
Sub Procedure_1()

    'Добавление записи.
    

    Dim myLastRowSheet_1 As Long, myLastRowSheet_2 As Long
    
    '1. Ускоряем работу кода.
    '1.1. Отключаем обновление монитора.
    Application.ScreenUpdating = False
    '1.2. Отключаем пересчёт формул.
    Application.Calculation = xlCalculationManual

    
    '2. Определяем строки, с которыми надо будет работать.
        'Макрос определяет нужные строки аналогично действиям в Excel,
        'если сделать активной последнюю ячейку в столбце и нажать
        'сочетание клавиш "Ctrl + Стрелка вверх".
    'На первом листе нужная строка определяется по столбцу "B".
    myLastRowSheet_1 = Worksheets(1).Cells(Rows.Count, "B").End(xlUp).Row
    'На втором листе - по столбцу "A".
    '+ 1, т.к. данные нужно вставить в пустую строку.
    myLastRowSheet_2 = Worksheets(2).Cells(Rows.Count, "A").End(xlUp).Row + 1
    
        
    '3. Заполнение второго листа.
    '3.1. Установка порядкового номера.
    'Нужно учесть, не первая ли это строка с данными.
    If myLastRowSheet_2 = 2 Then
        Worksheets(2).Cells(myLastRowSheet_2, "A").Value = 1
    Else
        Worksheets(2).Cells(myLastRowSheet_2, "A").Value = _
            Worksheets(2).Cells(myLastRowSheet_2 - 1, "A").Value + 1
    End If
        
    '3.2. Перенос данных из первого листа во второй.
    Worksheets(2).Range("B" & myLastRowSheet_2 & ":G" & myLastRowSheet_2).Value = _
        Worksheets(1).Range("B" & myLastRowSheet_1 & ":G" & myLastRowSheet_1).Value
    
    '3.3. Вставка даты.
    Worksheets(2).Cells(myLastRowSheet_2, "H").Value = Date
    
    
    '4. Включаем то, что отключали.
    Application.ScreenUpdating = True
    'Пересчёт производится во всех открытых книгах и только
        'в том случае, если в формуле произошло изменение.
    Application.Calculation = xlCalculationAutomatic

End Sub
Скрипт вне форума Ответить с цитированием
Старый 10.04.2013, 17:08   #5
Edvardstrannik
 
Регистрация: 01.04.2013
Сообщений: 3
По умолчанию

Огромное человеческое спасибо "Скрипт" за макрос! Работает как надо. Книгу малость переделал, появились новые трудности. Есть пара вопросов, но поковыряюсь пока сам. Выкладываю то что получилось на данный момент. С книгой работаю в Excel 2010.
Надстройка для вставки значений при нажатии CTRL+ENTER взят с сайта Эксельвба.ру. Поскольку не придумал как реализовать выбор из списка(лист "Спис_адрес"), который заполняется по тому же принципу что и листы с договорами(то есть динамический) вставку в ячейку B3 листа меню.
Вложения
Тип файла: rar Учет договоров 1.1.rar (110.1 Кб, 237 просмотров)
Edvardstrannik вне форума Ответить с цитированием
Старый 10.04.2013, 17:43   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Приведённый Вами в 3-м сообщении код делал буквально то, что Вам и нужно - только подправить диапазоны, имя листа и уточнить, по какому столбцу искать последнюю заполненную строку (код ищет по второму, но думаю Вам как раз это и нужно).
Ну и одно замечание - код копирует только данные, без форматов/заливок.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Гиперссылки с одного листа на другой, v2 redmilks Microsoft Office Excel 5 04.05.2018 10:07
Макрос переноса строки из одного листа в другой ссержа Microsoft Office Excel 7 04.04.2016 15:03
Как написать макрос, который бы переносил данные из одного файла в другой Secto500 Microsoft Office Excel 1 10.12.2012 16:18
макрос для копирования строк из одного листа в другой если функция не ровна "" rodgerr86 Microsoft Office Excel 0 04.07.2012 00:12
как сделать, чтобы при переносе с одного листа на другой данные не заменялись, а писались в новую строку? user199a Microsoft Office Excel 4 08.01.2011 18:13