Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сделать отчет в EXCEL, (не отчет Access) 
:(
    Опции темы
VirusE
Дата 9.2.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.12.2004

Репутация: нет
Всего: нет



Скорее всего подобное на форуме есть, но у меня интернет через мобильник, по этому лопатить все просто не могу себе позволить.
Проблема такая.
Делаю Базу данных в 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" нет.
PM MAIL   Вверх
VirusE
Дата 9.2.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.12.2004

Репутация: нет
Всего: нет



Вроде во все разобрался (нашел ошибку в коде), но появился вопрос с форматированием ячеек.
Частично работает, но многое - нет.
Не обрабатывается:
Выравнивание текста, границы ячеек.
(Код делал в Excel через запись макроса и вставлял (подкорректировав) в свой.

Это сообщение отредактировал(а) VirusE - 9.2.2007, 21:52
PM MAIL   Вверх
bopoha
Дата 10.2.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Так вот просто подсказать не видя кода очень тяжело. Попробуй следующий метод: сделай лист настроек. В нем определенным ячейкам присвой нужный формат. Потом копируй формат (опять же макросом код запиши) на лист данных в нужную область ячеек. Этот метод гораздо гибче.
PM MAIL WWW ICQ Skype GTalk   Вверх
VirusE
Дата 11.2.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.12.2004

Репутация: нет
Всего: нет



Код приблизительно такой:

    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

Я не совсем понял про лист настроек, нужно его создать и сохранить, а потом каждый раз при запуске копировать формат или записать макрос при его создании?
В принципе я делал лист с настройками ячеек, и записывал при этом макрос, но вот его то код и не работает.
PM MAIL   Вверх
bopoha
Дата 11.2.2007, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



:-) какой ты веселый.

напиши в начале модуля 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 можно убрать - чтобы он надоедающее окошко не показывал, но красным цветом код с ошибкой выделять будет.
PM MAIL WWW ICQ Skype GTalk   Вверх
VirusE
Дата 11.2.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.12.2004

Репутация: нет
Всего: нет



То что это константы, я уже понял, даже узнал типы и знычения (Valueв цифирях) (в помощи к VBA Excel есть перечень групп констант, их имена и значения). Пробывал вместо констант забивать цифры, но не пошло, есть подозрение, что числовые значения тоже отличаются. Помучаю еще.
smile
А веселый такой я потому, что программирую по необходимости, по причине большой лени, не во всех делах начальство любит автоматизацию (и спец проги не предоставляет, а отчет по нескольким сотням а то и тысячам записей делать не весело), первая прога была полностью в EXCEL, но там все записи в одной таблице и просто по циклу сортировались по разделам отчета, и страницы форматировались. Но работала она **** долго. Вот сейчас доделываю вторую, в Access.
PM MAIL   Вверх
VirusE
Дата 4.3.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.12.2004

Репутация: нет
Всего: нет



Новая проблема, прошу срочно помочь если кто-то имел с этим дело.
В вышеуказанном отчете нужно сделать диаграмму,
Опробывал много вариантов, но не получается ее форматировать.
Вариант первый диаграмма вставляется в книгу, назначаются диапозон данных, имена и т.п. Но после назначения листа (.Location где она должна быть), контроль над ней пропадает (нужно изменить расположение на листе и размер).
Если диаграмма вставляется сразу в лист, контролянет вообще, но зато размеры, те которые требуются.
Код


'Вариант один:
NewWorkbook.Charts.Add
With NewWorkbook.Activechart
name_di = .Name
    .ChartType = 51
    .SeriesCollection(1).XValues = NewWorkbook.sheets(name_sort).Range(NewWorkbook.sheets(name_sort).cells(13, 2), NewWorkbook.sheets(name_sort).cells(12 + kol_i_def, 2))
    .SeriesCollection(1).Values = NewWorkbook.sheets(name_sort).Range(NewWorkbook.sheets(name_sort).cells(13, 3 + kol_i_date), NewWorkbook.sheets(name_sort).cells(12 + kol_i_def, 3 + kol_i_date))
    .HasTitle = True
    .ChartTitle.Characters.Text = "название"
    .Axes(1, 1).HasTitle = True
    .Axes(1, 1).AxisTitle.Characters.Text = "осьХ"
    .Axes(2, 1).HasTitle = True
    .Axes(2, 1).AxisTitle.Characters.Text = "осьУ"
    .HasLegend = False
    n = .Name
    .Location Where:=2, Name:=name_sort
End With

'Вариант два

Dim MyCO As Object
Dim MyC  As Object
Set MyCO = NewWorkbook.Activesheet.ChartObjects.Add(25, 300, 600, 350)
Set MyC = NewWorkbook.Activesheet.Activechart
name_dia = MyCO.Name

With NewWorkbook.Activesheet.ChartObjects(name_dia)
.RoundedCorners = False
.Shadow = False
End With

'Дальше не работает, показана одна из попыток, поэтому код корявый

With NewWorkbook.sheets(name_sort).Shape(name_dia).ChartObjects.Chart
    .SeriesCollection(1).XValues = NewWorkbook.sheets(name_sort).Range(NewWorkbook.sheets(name_sort).cells(13, 2), NewWorkbook.sheets(name_sort).cells(12 + kol_i_def, 2))
    .SeriesCollection(1).Values = NewWorkbook.sheets(name_sort).Range(NewWorkbook.sheets(name_sort).cells(13, 3 + kol_i_date), NewWorkbook.sheets(name_sort).cells(12 + kol_i_def, 3 + kol_i_date))
    .ChartType = 51
.HasLegend = False
.HasTitle = True
With .ChartTitle
.Characters.Text = "строка"
.Font.Size = 14
End With

End With

Как правильно написать обращение к диаграме в EXCEL из макроса в Access
Задолбался, два дня пробывал различные варианты

Это сообщение отредактировал(а) VirusE - 5.3.2007, 09:55
PM MAIL   Вверх
bopoha
Дата 4.3.2007, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Вариант с шаблоном (xlt) не подходит? Т.е. создаешь диаграму, настраиваешь и сохраняешь как шаблон. А в коде создаешь новый документ на основании шаблона, только впечатываешь данные и определяешь диапазон данных для диаграммы.
PM MAIL WWW ICQ Skype GTalk   Вверх
Akina
Дата 5.3.2007, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Модератор: Используйте тег Код


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
VirusE
Дата 5.3.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.12.2004

Репутация: нет
Всего: нет



А пример можно? (как это сделать)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0959 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.