| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS Access > Сделать отчет в EXCEL |
| Автор: VirusE 9.2.2007, 10:40 |
| Скорее всего подобное на форуме есть, но у меня интернет через мобильник, по этому лопатить все просто не могу себе позволить. Проблема такая. Делаю Базу данных в Access, но отчеты по ней нужны в Excel (при чем не стандартный отчет). Имеем таблицу | Дата | Номер заготовки | Тип заготовки | Дефект | Дата - дата осмотра Номер - номер присваивается при производстве Тип заготовки - сортамент (размеры) Дефект - если пустое поле, то годная, если нет, описание и код (по перечню) Нужно сделать таблицы в Exele нажатием кнопки в форме в Access Табличка нужна такая: Столбцы - дата Строки количество деффектов (по виду) Типа | | Дата 1 | Дата 2 | Дата 3 | | Дефект 1 | | | | | Дефект 2 | | | | | Дефект 3 | | | | Каждый Тип заготовки на своем листе Скрипты в Access и Excel я написать могу, но Я не знаю как (и не боюсь в этом сознаться): Открыть новый документ Excel (сам Excel открывается, но дальше не получается), при чем активным он должен стать после завершения создания отчета). Вносить данные в этот документ, подразумевается (управление данными в ячейке Exele командой из Access. В принципе, как выделить данные из базы я знаю Алгоритм приблизительно такой (знак вопроса, там, где я не знаю, как сделать) 1 Открываем форму для указания месяца и года 2 Открываем Пустую книгу и присваеваем ей имя (год/месяц выборки + дата составления) (?) 3 Запрос к БД - узнаем типы Заготовок в этом месяце 4 Запускаем цикл по каждому типу заготовки 4.1 Создаем лист с именем соответствующим типу заготовки (?) 4.2 Запрос к БД - узнаем Виды дефектов за этот месяц по этому типу заготовки. 4.3 Запускаем цикл по каждому виду дефекта 4.3.1 Создаем в Exele строку с именем дефекта (пустое поле - годная) (?) 4.3.2 Запрос в БД - узнаем даты осмотров (еще не решил делать по всем датам или только по имеющимся) 4.3.3 Цикл по датам 4.3.3.1 Создаем заголовок столбца с датой 4.3.3.2 Запрос в БД - поиск количества записей по дате, дефекту, сорту 4.3.3.3 Присваиваем получившееся значение ячейке. (?) Принцип понятен. непонятно только, как обращаться к Excel из Access Я конечно мог бы и сам разобраться, но время жмет. PS. И еще подскажите верный синтаксис UPDATE в скрипте, вносить данные в таблицу могу, а исправлять не получается. Set con = Application.CurrentProject.Connection Set rs = CreateObject("ADODB.Recordset") stSql = "SELECT * FROM [Таблица] " stSql = stSql & "WHERE [Значение1]=" & A & " AND [Значение2]=" & B rs.Open stSql, con, 1 При присвоении stSql запроса "Delete" работает а "update" нет. |
| Автор: VirusE 9.2.2007, 21:51 |
| Вроде во все разобрался (нашел ошибку в коде), но появился вопрос с форматированием ячеек. Частично работает, но многое - нет. Не обрабатывается: Выравнивание текста, границы ячеек. (Код делал в Excel через запись макроса и вставлял (подкорректировав) в свой. |
| Автор: bopoha 10.2.2007, 01:00 |
| Так вот просто подсказать не видя кода очень тяжело. Попробуй следующий метод: сделай лист настроек. В нем определенным ячейкам присвой нужный формат. Потом копируй формат (опять же макросом код запиши) на лист данных в нужную область ячеек. Этот метод гораздо гибче. |
| Автор: VirusE 11.2.2007, 12:07 |
| Код приблизительно такой: Dim ExcelApp As Object Dim NewWorkbook As Object Dim NewSheet As Object Set ExcelApp = CreateObject("Excel.Application") On Error Resume Next ExcelApp.UserControl = True ExcelApp.Workbooks.Add Set NewWorkbook = ExcelApp.ActiveWorkbook ... Сдесь запрос к базе данных (поиск типов детали) и начало цикла по ним ... NewWorkbook.sheets.Add Set NewSheet = NewWorkbook.ActiveSheet NewSheet.Name =" Значение типа детали из запроса " With NewSheet .Range("A7:A12").NumberFormat = "@" 'Выполняется .Cells(7, 1) = "n/n" 'Выполняется .Range("A7:A8").Merge 'Выполняется .Range("A7:A8").HorizontalAlignment = xlCenter 'НЕ выполняется .Range("A7:A13").LineStyle = xlContinuous 'НЕ выполняется Selection.Borders(xlDiagonalDown).LineStyle = xlNone ' и далее НЕ выполняется но и ошибки не выдает (думаю считает параметры типа xlNone, xlContinuous не определенными (при проверке по строчно показывает их =empty???)) Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End With Я не совсем понял про лист настроек, нужно его создать и сохранить, а потом каждый раз при запуске копировать формат или записать макрос при его создании? В принципе я делал лист с настройками ячеек, и записывал при этом макрос, но вот его то код и не работает. |
| Автор: bopoha 11.2.2007, 14:58 |
| :-) какой ты веселый. напиши в начале модуля Option Explicit и код даже не выполниться! Потому что константы xlCenter и пр. определены только в Excel. Выхода отсюда 2-а: 1. добавить в mdb ссылку (Reference) на Excel.exe 2. объявить исопльзуемые константы (типа Long, елси не ошибаюсь). Значения их можно получить в окне отладки (Ctrl+G) в Excel. Например: ?xlCenter PS: чтобы при создании модулия редактор всегда вставлял Option Explicit необходимо в окне редактора выбрать Tools->Options. В открывшемся окне поставить галочку напротив Requare Variable Declaration, а с пункта Auto Syntax Check можно убрать - чтобы он надоедающее окошко не показывал, но красным цветом код с ошибкой выделять будет. |
| Автор: VirusE 11.2.2007, 20:56 |
| То что это константы, я уже понял, даже узнал типы и знычения (Valueв цифирях) (в помощи к VBA Excel есть перечень групп констант, их имена и значения). Пробывал вместо констант забивать цифры, но не пошло, есть подозрение, что числовые значения тоже отличаются. Помучаю еще. А веселый такой я потому, что программирую по необходимости, по причине большой лени, не во всех делах начальство любит автоматизацию (и спец проги не предоставляет, а отчет по нескольким сотням а то и тысячам записей делать не весело), первая прога была полностью в EXCEL, но там все записи в одной таблице и просто по циклу сортировались по разделам отчета, и страницы форматировались. Но работала она **** долго. Вот сейчас доделываю вторую, в Access. |
| Автор: VirusE 4.3.2007, 19:24 | ||
| Новая проблема, прошу срочно помочь если кто-то имел с этим дело. В вышеуказанном отчете нужно сделать диаграмму, Опробывал много вариантов, но не получается ее форматировать. Вариант первый диаграмма вставляется в книгу, назначаются диапозон данных, имена и т.п. Но после назначения листа (.Location где она должна быть), контроль над ней пропадает (нужно изменить расположение на листе и размер). Если диаграмма вставляется сразу в лист, контролянет вообще, но зато размеры, те которые требуются.
Как правильно написать обращение к диаграме в EXCEL из макроса в Access Задолбался, два дня пробывал различные варианты |
| Автор: bopoha 4.3.2007, 20:02 |
| Вариант с шаблоном (xlt) не подходит? Т.е. создаешь диаграму, настраиваешь и сохраняешь как шаблон. А в коде создаешь новый документ на основании шаблона, только впечатываешь данные и определяешь диапазон данных для диаграммы. |
| Автор: Akina 5.3.2007, 00:23 |
| Модератор: Используйте тег Код |
| Автор: VirusE 5.3.2007, 09:52 |
| А пример можно? (как это сделать) |