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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2013, 23:23   #1
under4eg
 
Регистрация: 01.03.2013
Сообщений: 5
По умолчанию Ведение "лога" документации

Добрый вечер.
Долго ломал голову и никак не смог придумать, как это сделать.
В общем, такая картина:

Есть книга, в ней 3 листа. На первом листе вводится информация по товару(стоимость, кол-во, ед. измерения, название). На второй странице формируется накладная и счет-фактура, все введенные данные считаются и красиво выводятся в 2 таблички под печать.
Но получатель накладных поставил свои требования и нельзя, к примеру, создать накладную на 10-20 наименований(нужна 1 накладная на 1 наименование товара), простым сохранением накладных или самой программы на компьютере не обойтись. Печатью в двух экземплярах тоже, т.к. бумаги будет просто огромезная куча и найти что-либо в ней будет очень тяжело.

Что, собсна, требуется. Нужно, чтобы информация (дата, номер накладной, наименование, цена, кол-во, сумма) выводилась в виде списка на листе 3, но чтобы каждая последующая введенная под печать информация вводилась в последующую строку на листе 3.
Есть какие-то идеи?
Заранее спасибо!
under4eg вне форума Ответить с цитированием
Старый 02.03.2013, 06:09   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 906
По умолчанию

Пункт 1

under4eg, если средствами программы "Excel" не получается сделать, или получается, но очень сложно, то можно попробовать использовать макросы.


Пункт 2

А какая связь между вашим заданием и словом "лог"?
Скрипт вне форума Ответить с цитированием
Старый 02.03.2013, 20:58   #3
under4eg
 
Регистрация: 01.03.2013
Сообщений: 5
По умолчанию

Википедия говорит:
Цитата:
Лог — (англ. log) журнал событий, дневник, запись, протокол;
Если оставить непонятную предвзятость и презрение к новичкам, то, в принципе, уместность слова "лог" здесь понятна почти любому человеку.
Нужна "история" распечатанных файлов. Можно было назвать историей, можно было логом. Я выбрал последнее.

По поводу макросов. Да, действительно, Вы мне очень помогли, сказав, что нужно юзать макросы. Эдакий упрощенный вариант а-ля "юзай макросы" я и сам знал, но, т.к. попросил помощи здесь, значит у меня с VBA как-то не срослось.

Зато я понял одну вещь. С вашим ответом мне и моим ответом на ваш ответ(за тавтологию прошу прощения), можно смело констатировать, что здесь мне не помогут.
under4eg вне форума Ответить с цитированием
Старый 02.03.2013, 21:13   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
можно смело констатировать, что здесь мне не помогут
вы правы.
не помогут, пока вы не прочитаете правила раздела,
где написано, что НАДО ПРИКРЕПИТЬ ПРИМЕР ФАЙЛА Excel

Макрос несложный - там хватит и 10 строк кода, и делать его недолго.
Но вот тратить время на то, чтобы воссоздать ваш файл (в надежде угадать его структуру), - как-то лень...

Всё просто:
Есть пример файла - есть помощь.
Нет файла - есть только абстрактные советы типа «используйте макросы»
EducatedFool вне форума Ответить с цитированием
Старый 02.03.2013, 21:30   #5
under4eg
 
Регистрация: 01.03.2013
Сообщений: 5
По умолчанию

Мой прокол, извините.
https://dl.dropbox.com/u/30242280/%D...0%B8%D1%8F.xls

Вот сам файл. В оригинале был на украинском, поэтому пусть вас не пугает сумма прописью.
under4eg вне форума Ответить с цитированием
Старый 02.03.2013, 21:41   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Поместите этот макрос в модуль ЭтаКнига:
Код:
Private Sub Workbook_BeforePrint(Cancel As Boolean)    ' срабатывает перед выводом на печать
    On Error Resume Next
    If ActiveSheet.Name = "Лист2" Then    ' если печатается нужный лист
        ' добавляем запись на Лист3
        Worksheets("Лист3").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 6).Value = _
        Array(Now, [b13], [c13], [f13], [g13], [h13])
    End If
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 02.03.2013, 21:47   #7
under4eg
 
Регистрация: 01.03.2013
Сообщений: 5
По умолчанию

Наглею, но.
Можно ли сделать, чтобы модуль еще вписывал туда другие позиции(в таблице до 6 наименований)?
Т.е., к примеру, если есть томаты и огурцы, то в логе вписывались обе. Если одной нету(всегда есть только позиция под номером 1, остальные очень редко), то записывается первая, но если другие есть, то записываются все.

Последний раз редактировалось under4eg; 02.03.2013 в 22:28.
under4eg вне форума Ответить с цитированием
Старый 02.03.2013, 23:59   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Реализовано:
Код:
Private Sub Workbook_BeforePrint(Cancel As Boolean)    ' срабатывает перед выводом на печать
    On Error Resume Next
    If ActiveSheet.Name = "Лист2" Then    ' если печатается нужный лист
        Dim cell As Range
        For Each cell In [b13:b18].Cells    ' перебираем ячейки с номерами
            If Val(cell) Then    ' если номер - непустой, то добавляем запись на Лист3
                Worksheets("Лист3").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 6).Value = _
                Array(Now, cell, cell.Offset(, 1), cell.Offset(, 3), cell.Offset(, 4), cell.Offset(, 5))
            End If
        Next cell
    End If
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 03.03.2013, 01:19   #9
under4eg
 
Регистрация: 01.03.2013
Сообщений: 5
По умолчанию

Всё работает, подогнал под себя, спасибо.
Кому нужен рабочий вариант программы - обращайтесь.
under4eg вне форума Ответить с цитированием
Старый 03.03.2013, 08:45   #10
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 906
По умолчанию

Цитата:
EducatedFool: On Error Resume Next
а это зачем нужно?
Скрипт вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Ведение лога изменений в базе erzi Microsoft Office Access 6 02.02.2011 21:55
Как "в ручную" правильно организовать ведение истории в базе данных grenles БД в Delphi 2 18.09.2010 10:53
Как добавить ведение лога в свою программу? Человек_Борща Общие вопросы Delphi 12 20.02.2010 14:30
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04