Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
McLotos
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 21
1

Автоматизация отправки отчетов

05.01.2011, 07:48. Просмотров 1367. Ответов 8
Метки нет (Все метки)

Эта тема подымалась уже не раз, но всё же повторюсь... суть вот в чем:
Получаю файл csv огромный (несколько тысяч строк, колличество строк постоянно разное.)
В файле содержится информация обо всех действиях обонента сотовой связи, все его смс, звонки, выходы в интернет и прочее. Абонентов несколько десятков.
Моя задача отфильтровать данные в файле, и создать под каждого абонента свой файл, который будет содержать только нужную ему информацию.
И разослать все эти файлы по пользователям.
Долго мучился, додумался только до такого кода
Columns("H:H").AutoFilter 'включаем фильтр по сумме звонков абонентов
Selection.AutoFilter Field:=1, Criteria1:="0" 'находим нулевые звонки (звонки, у которых стоимость равна нулю)
Range("a2", Range("a2").End(xlDown).End(xlToRight)).Select 'выделяем все нулевые звонки
Selection.Delete Shift:=xlUp 'удаляем
Columns("H:H").AutoFilter 'выключаем фильтр суммы
Columns("C:C").AutoFilter 'включаем фильтр номера
Selection.AutoFilter Field:=1, Criteria1:="777*******" 'берём первого пользователя
Cells.Select
Range("a1", Range("a1").End(xlDown).End(xlToRight)).Select 'выделяем всё
Selection.Copy 'копируем
Workbooks.Add 'создаём новую книгу
ActiveSheet.Paste 'вставляем
Application.CutCopyMode = False 'на самом деле не копируем а вырезаем
ActiveWorkbook.SaveAs Filename:="C:\Abonent1.xls", FileFormat:=xlNormal, _ 'сохраняем под именем пользователя номера
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWindow.Close 'закрываем получившийся документ


И вся эта процедура повторяется столько раз, сколько пользователей в базе, понимаю что топорный вариант, но по-другому пока не придумал. Подскажите как это оптимизировать? Кстати в получившемся файле нужно ещё убирать повторяющиеся колонки, к примеру колонка А пользователям не нужна, там номер их договора, колонка B тоже, номер групы, Колонка С Номер телефона, естественно идентична колонке I Исходящий номер, Колонки K и N тоже можно убрать, а колонку O сдвинуть ближе. Это у меня тоже всё делается, и даже выставляются по ширине содержимого все колонки, но если это всё писать то код будет в 3 раза больше.

После этого всего бреда выполняется следующее

Dim OutlookApp As Object, SM As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set SM = OutlookApp.CreateItem(olMailItem)
SM.To = "abonent.name@domain.com"
SM.Subject = "Report"
SM.Body = "Сумма допустимая для вашего номера равна (здесь дожна быть сумма ежемесячного баланса), вы воспользовались связью на общую сумму (здесь сумма, потраченная абонентом), вы привысили баланс на (здесь сумма привышения, если имеется)"
SM.Attachments.Add "C:\Abonent.xls"
On Error Resume Next
SM.Send
Set SM = Nothing
Set OutlookApp = Nothing


Можно было бы конечно пользоваться и этим топорным методом, но есть проблема, абоненты постоянно меняются, кто-то уходит, кто-то появляется, кто-то передаёт свой номер другому лицу (кстати в таком случае нужно учитывать и дату передачи, чтобы звонки старого владельца остались ему, а новый владелец получил только свои звонки, а не весь отчет за месяц.)
Есть идейка создать отдельный файл с пользователями, и брать оттуда данные т.е. номер, кому принадлежит, период пользования, e-mail абонента, разрешимый баланс. Но вот как это сделать я не понимаю.

Согласен загрузил Вас по полной, но если у кого-то всё-таки созрели идеи прошу поделиться.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2011, 07:48
Ответы с готовыми решениями:

Автоматизация отправки E-Mail из Access 2000
Решал ли кто-либо такую задачку (или встречал инструмент для ее решения): В...

Список отчетов на главной форме
Доброго времени суток! Подскажите пожалуйста, как сделать на главной форме,...

Выгрузка отчетов из базы в Excel
Есть база данных в access, необходимо чтобы отчеты выгружались в excel, причем...

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

Выгрузка SQL отчетов в Excel
Всем привет ) На досуге нужда меня заставила освоить VBA для решения задачи...

8
Busine2009
Заблокирован
05.01.2011, 10:24 2
Цитата Сообщение от McLotos Посмотреть сообщение
Получаю файл csv
и как вы переводите этот файл в Excel?

Добавлено через 3 минуты
Цитата Сообщение от McLotos Посмотреть сообщение
к примеру колонка А пользователям не нужна
Visual Basic
1
Columns("A:A").Delete
0
McLotos
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 21
06.01.2011, 07:22  [ТС] 3
Цитата Сообщение от Busine2009 Посмотреть сообщение
и как вы переводите этот файл в Excel?
Никак. Excel и так прекрасно понимаетэтот тип файлов.
0
Busine2009
Заблокирован
06.01.2011, 07:45 4
McLotos,
вы лучше по 1 вопросу задавайте по своей теме, что именно у вас не получается?
0
Fedogor
209 / 95 / 6
Регистрация: 23.07.2010
Сообщений: 235
06.01.2011, 09:57 5
Думаю эту задачу лучше решать в Access, или другой базе данных. Просто запросы такого рода в нём легче составить.
А сами отчеты передавать в Excel.
0
McLotos
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 21
10.01.2011, 07:35  [ТС] 6
Цитата Сообщение от Busine2009 Посмотреть сообщение
McLotos,
вы лучше по 1 вопросу задавайте по своей теме, что именно у вас не получается?
Как сделать файл абонентов? Ну т.е. файл, в котором будет находится таблица типа имя,номер,период пользования номером,e-mail
Чтобы из этой таблицы брались данные для поиска и сортировки.
Т.е. макрос находит этот файл, смотрит имя пользователя, каким номером он пользовался и в какой период, ищет в отчетном файле звонки именно этого пользователя и отправляет ему на e-mail.
Потому-что в том варианте, который сделал я сначала удаляются все нулевые строки, затем включается фильтрация по номеру, все звонки номера выкидываются в отдельный файл и отправляются абонентам по почте, но опять же без учета периода пользования (а как я уже говорил, в течение месяца владелец номера может измениться, а никому не хочется платить за чужие звонки), и всё это прописано вручную по каждому юзеру, т.е. если в базе 100 юзеров, значит в коде 100 одинаковых процедур.

Цитата Сообщение от Fedogor Посмотреть сообщение
Думаю эту задачу лучше решать в Access, или другой базе данных. Просто запросы такого рода в нём легче составить.
А сами отчеты передавать в Excel.
А Access может открывать csv?
0
Busine2009
Заблокирован
10.01.2011, 10:19 7
А Access может открывать csv?
Файл - Открыть - Тип файлов - просмотрите, что можно открыть.
0
McLotos
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 21
12.01.2011, 14:19  [ТС] 8
Access Не открывает, точнее не понимает csv
Так что в любом случае придётся делать всё в excell
Получается никто не знает как это реализовать?
Как создать файл с таблицей Имя пользователя-Номер пользователя-email чтобы с этогой файлв брались данные для обработки таблицы?
0
Busine2009
Заблокирован
12.01.2011, 14:38 9
McLotos,
я сейчас сделал csv-файл с помощью Excel и открыл его в Access.

Добавлено через 55 секунд
Цитата Сообщение от McLotos Посмотреть сообщение
Имя пользователя-Номер пользователя-email
это название столбцов или имя файла Excel?
0
12.01.2011, 14:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2011, 14:38

Программное создание динамичных отчетов в MS Access
Добрый день! Есть такая задача, с VBA я сам не очень дружу (редко очень),...

Макрос создания отчетов по клиентам из одного отчета
Господа форумчане,добрый день! Задача следующая: Имеется отчет со...

Возможность формирования нескольких отчетов, в зависимости от выделенных строк таблицы
Добрый день! Стоит задача отметить несколько строк в таблице и по нажатию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru