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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Все тот же экспорт из Access в Excel, вариантов много, но мне нужен другой 
:(
    Опции темы
shurrik
Дата 6.9.2006, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Private Sub Кнопка139_Click()
Dim ExcelApp As Object, ExcelWorkbook As Object, ExcelSheet As Object
Set ExcelApp = CreateObject("Excel.Application")
'ExcelApp.Workbooks.Add
ExcelApp.Workbooks.Open "C:\Ocenka\Ocenka.xls"
Set ExcelWorkbook = ExcelApp.Workbooks(1)
Set ExcelSheet = ExcelApp.Workbooks(1).Worksheets(1)
With ExcelSheet

Здесь надо вставить код, чтобы в ячейки в Excel вставлялись данные из баззы Access'а. Вот что только не перерыл ответа так и не нашел. Были варианты, но они не подходят.


ExcelApp.Visible = True
WorkBook.Close SaveChanges:=False
Set WorkBook = Nothing
AppExcel.Quit
Set AppExcel = Nothing
End Sub

PM MAIL   Вверх
shurrik
Дата 8.9.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Неужели никто не подскажет. Я вообще не программировал в Access. Програмил в других. А тут по работе надо access-овскую прогу подредактировать.
PM MAIL   Вверх
Юдифь
Дата 22.10.2006, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.10.2006
Где: Монголия, Эрдэнэт

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



Не знаю, может тебе уже не нужно, но вот пример:


Код

Set rstSpis = CurrentDb.OpenRecordset("тут имя твоей таблицы")

'последовательный ввод записей из таблицы в рабочий лист
k = 1
j = 1
rstSpis.MoveFirst
    Do Until rstSpis.EOF
        For i = 0 To rstSpis.Fields.Count 
            .ActiveSheet.Cells(k, i + 1).Value = rstSpis.Fields(i).Value
        Next i
        k = k + 1
   Loop

PM ICQ   Вверх
shurrik
Дата 29.1.2007, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пишет Compile Error: Invalid or unqualified reference и ссылается на строчку: .ActiveSheet.Cells(k, i + 1).Value = rstSpis.Fields(i).Value именно на .ActiveSheet

Добавлено @ 05:39 
в чем трабл?
PM MAIL   Вверх
dionisiu
Дата 29.1.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

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



Так код, приведённый Юдифь вставь вместо 
Цитата(shurrik @  6.9.2006,  05:07 Найти цитируемый пост)
Здесь надо вставить код, чтобы в ячейки в Excel вставлялись данные из баззы Access'а. Вот что только не перерыл ответа так и не нашел. Были варианты, но они не подходят.

а после Loop не забудь добавить End With
PM MAIL ICQ   Вверх
shurrik
Дата 30.1.2007, 04:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну это и дураку понятно, что End With добавить надо  smile

Добавлено @ 04:30 
Так кто-нибудь подскажет почему ошибка вылазит? Заранее благодарен!
PM MAIL   Вверх
bopoha
Дата 4.2.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Как то нелогично получается:
строка
".ActiveSheet.Cells(k, i + 1).Value ..."
с учетом with выглядит так:
"ExcelSheet.ActiveSheet.Cells(k, i + 1).Value ...."
т.е. "лист.лист.ячейка"

я бы тоже ругался, т.к.  (помойму) ActiveSheet определен только у Workbook

Итого, нужно так

".Cells(k, i + 1).Value ...."

Это сообщение отредактировал(а) bopoha - 4.2.2007, 15:26
PM MAIL WWW ICQ Skype GTalk   Вверх
shurrik
Дата 6.2.2007, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все равно ругается на эту строку  smile 
PM MAIL   Вверх
bopoha
Дата 6.2.2007, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Тогда кинь БД с этой функцией и табличкой посмотрим. Никогда с подобной ошибкой не встречался.
PM MAIL WWW ICQ Skype GTalk   Вверх
shurrik
Дата 6.2.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



http://rapidshare.com/files/15152757/Ocenka.rar.html - Здесь всё. Экспорт в Excel Кнопка 160
PM MAIL   Вверх
bopoha
Дата 9.2.2007, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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




Код должен выглядеть так:

Код

    Do Until rstSpis.EOF
        For i = 1 To rstSpis.Fields.Count - 1
            ExcelSheet.Cells(k, i + 1).Value = rstSpis.Fields(i).Value
        Next i
        k = k + 1
        rstSpis.MoveNext
   Loop


Почему не работало:
rstSpis.Fields.Count - количество элементов, а не максимальный индекс! Поэтому элемента с номером rstSpis.Fields.Count нет. Вот и ругалось.

И еще ты забыл переходить на следующую запись: rstSpis.MoveNext.

И еще:
Объяви в начале модуля директиву Option Explicit. Она требует явного описание всех переменных. 
rstSpis нигде не объявлена. Чуть ошибешся в имени и можешь очень долго искать ошибку.

По поводу отладки:
Очень удобно пользоваться Immediate Window (Ctrl + G). Там в режиме отладки можно проверять различные выражения на работоспосоность.
Например:
?ExcelSheet.Cells(k, i + 1).Value - это заработало


?rstSpis.Fields(i).Value - это нет, значит ошибка тут!


Обработка полей, так удобней - не ошибешся:

Код

Dim fld As DAO.Field
Dim rstSpis As DAO.Recordset

...

For Each fld In rstSpis.Fields
    ...
Next fld
...


ЗЫ: Тяжело было скачивать с рапиды. Целый день парился. В след раз просто прикрепляй к сообщению файлик.
PM MAIL WWW ICQ Skype GTalk   Вверх
shurrik
Дата 9.2.2007, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(bopoha @ 9.2.2007,  01:02)
Код должен выглядеть так:

Код

    Do Until rstSpis.EOF
        For i = 1 To rstSpis.Fields.Count - 1
            ExcelSheet.Cells(k, i + 1).Value = rstSpis.Fields(i).Value
        Next i
        k = k + 1
        rstSpis.MoveNext
   Loop


Почему не работало:
rstSpis.Fields.Count - количество элементов, а не максимальный индекс! Поэтому элемента с номером rstSpis.Fields.Count нет. Вот и ругалось.

И еще ты забыл переходить на следующую запись: rstSpis.MoveNext.

И еще:
Объяви в начале модуля директиву Option Explicit. Она требует явного описание всех переменных. 
rstSpis нигде не объявлена. Чуть ошибешся в имени и можешь очень долго искать ошибку.

По поводу отладки:
Очень удобно пользоваться Immediate Window (Ctrl + G). Там в режиме отладки можно проверять различные выражения на работоспосоность.
Например:
?ExcelSheet.Cells(k, i + 1).Value - это заработало


?rstSpis.Fields(i).Value - это нет, значит ошибка тут!


Обработка полей, так удобней - не ошибешся:

Код

Dim fld As DAO.Field
Dim rstSpis As DAO.Recordset

...

For Each fld In rstSpis.Fields
    ...
Next fld
...


ЗЫ: Тяжело было скачивать с рапиды. Целый день парился. В след раз просто прикрепляй к сообщению файлик.

Спасибо! Большое! Заработало!  С меня бутылка smile  
Теперь нужно, чтобы этот отчет формировался по заданному месяцу и году. Можно ли как нибудь сделать это через запрос или без него? Запрос есть: Format([Принадлежность];"mm.yyyy") С помощью него формируется отчет Access'овский. Как это реализовать в коде для Excel? Заранее благодарю

PM MAIL   Вверх
shurrik
Дата 9.2.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цель: Вывести в заголовок Экселевского документа название отделения из базы Access.
Что получилось: В Excel выгрузить получилось.
Не получилось: Выбирать отделение в форме "Настройка" приходится два раза. В файле, который я выложил, т.е. в самой форме "настройка", только одно выпадающее меню. При выборе отделения (используется таблица Подразделения), в таблицу "Локальная настройка" заносится только kod, а столбец Name остается пустым. Создаю второе выпадающее меню и таблицу "Отделение". Теперь заносится и название, но в таблицу "Локальная настройка" и "Отделение" (созданая уже мною дополнительно). Но теперь приходится выбирать и в первом меню и во втором одно и то же отделение, что конечным пользователям будет неудобно. Как все сделать, используя одно меню?  Что я только не делал ничего не получается. А ведь по любому дело в какой-то мелочи.
Ниже привел код.
Для выпадающего меню 1:
В конструкторе -> Данные -> Источник строк: SELECT Подразделения.kod, Подразделения.Name FROM Подразделения ORDER BY [kod];
Данные: kod
Тип источника строк: Таблица или запрос
Для выпадающего меню 2:
В конструкторе -> Данные -> Источник строк: SELECT Подразделения.Name FROM Подразделения ORDER BY [Name];
Данные: Name
Тип источника строк: Таблица или запрос
Код нажатия кнопки в форме "Настройка": 
CurrentDb.TableDefs("Оценка").Fields("Код филиала").DefaultValue = [Forms]![Настройка]![ПолеСоСписком0]
CurrentDb.TableDefs("Отделение").Fields("Name").DefaultValue = [Forms]![Настройка]![ПолеСоСписком7]

PM MAIL   Вверх
bopoha
Дата 10.2.2007, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(shurrik @  9.2.2007,  10:37 Найти цитируемый пост)
Спасибо! Большое! Заработало!  С меня бутылка   Теперь нужно, чтобы этот отчет формировался по заданному месяцу и году. Можно ли как нибудь сделать это через запрос или без него? Запрос есть: Format([Принадлежность];"mm.yyyy") С помощью него формируется отчет Access'овский. Как это реализовать в коде для Excel? Заранее благодарю


Я не понял проблемы! Необходимо формировать запрос или на основании хранимого запроса с параметрами открывать Recordset и в путь...

Добавлено @ 01:14 
Цитата(shurrik @  9.2.2007,  16:57 Найти цитируемый пост)
Не получилось: Выбирать отделение в форме "Настройка" приходится два раза......


Брррр... ничего не понятно... но вобщем начнемс.

1. Хочешь, чтобы ты разобрался потом и тебя поняли? ПолеСоСписком0 и ПолеСоСписком7 не понятно про что. Обзывай как, напрмер, поля данных с префиксом... хоть понятней будет
Код

CurrentDb.TableDefs("Оценка").Fields("Код филиала").DefaultValue = [Forms]![Настройка]![ПолеСоСписком0]
CurrentDb.TableDefs("Отделение").Fields("Name").DefaultValue = [Forms]![Настройка]![ПолеСоСписком7]

Это же относится к меню 1 и меню 2.

2. Я так понял задачу: необходимо записать значение в поле, на основании выбранного значения из поля со списком. Решается это так:

Код

Me.P_Destination = Me.P_Source.Column(1) '-- присваиватся значение второго столбца


Делается это на событии "посел обновления" поля  P_Source.
PM MAIL WWW ICQ Skype GTalk   Вверх
shurrik
Дата 12.2.2007, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
Я не понял проблемы! Необходимо формировать запрос или на основании хранимого запроса с параметрами открывать Recordset и в путь...

На основании хранимого запроса.

Цитата
2. Я так понял задачу: необходимо записать значение в поле, на основании выбранного значения из поля со списком. Решается это так:
код Visual Basic 
1:
 Me.P_Destination = Me.P_Source.Column(1) '-- присваиватся значение второго столбца
Делается это на событии "посел обновления" поля  P_Source.

Да, вы правильно поняли задачу. На всякий случай прикрепил файлик программы с моими меню 1 и 2. Я вообще не программирую в Accesse, но по работе приходится. Желательно, чтобы записывалось в таблицу "Локальная настройка" или в отдельную таблицу. И вообще не пойму каким образом данные (в колонку kod) заносятся в таблицу "Локальная настройка"? Может я чего-то не туда смотрю или упускаю?


Это сообщение отредактировал(а) shurrik - 12.7.2007, 09:22
PM MAIL   Вверх
shurrik
Дата 12.2.2007, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вторая часть архива

Добавлено @ 08:25 
Цитата
Me.P_Destination = Me.P_Source.Column(1) '-- присваиватся значение второго столбца
Делается это на событии "посел обновления" поля  P_Source.

Можно вот с этого места подробнее? 

Это сообщение отредактировал(а) shurrik - 12.7.2007, 09:22
PM MAIL   Вверх
bopoha
Дата 13.2.2007, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Не удержался и переименовал поля:
ПолеСоСписком0 - P_Podrazdeleine
ПолеСоСписком7 - P_Shapka

Вобщем необходимо добавить событие для поля P_Podrazdeleine "После обновления".
Код получился такой:
Код

Private Sub P_Podrazdeleine_AfterUpdate()
    Me.P_Shapka = Me.P_Podrazdeleine.Column(1)
End Sub

Что он делает: присваивает значение 2-й колонки из выбранной строчки в поле P_Podrazdeleine полю со списком P_Shapka,  а отсюда значение попадает прямо в таблицу. 
PM MAIL WWW ICQ Skype GTalk   Вверх
shurrik
Дата 13.2.2007, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(shurrik @ 12.2.2007,  08:23)
Вторая часть архива

Добавлено @ 08:25 
Цитата
Me.P_Destination = Me.P_Source.Column(1) '-- присваиватся значение второго столбца
Делается это на событии "посел обновления" поля  P_Source.

Можно вот с этого места подробнее?

Спасибо! Пошло. А как сформировать отчет в Excel за выбраный период с помощью запроса? (Я уже спрашивал раньше :-)) А есть какие нибудь статьи по экспорту в Excel? (например, закрашивание ячеек и т.п.) Можешь ссылки кинуть?
PM MAIL   Вверх
shurrik
Дата 17.4.2007, 05:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть какие-нибудь идею по предыдущему сообщению?
PM MAIL   Вверх
shurrik
Дата 12.7.2007, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Товарищи программисты, неужели нету никаких мыслей? Подскажите  smile 
PM MAIL   Вверх
bopoha
Дата 12.7.2007, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Есть, вроде. я код на форуме выкладвывал, поищи. Или в ya.ru и google.com.
PM MAIL WWW ICQ Skype GTalk   Вверх
shurrik
Дата 12.7.2007, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

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

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


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

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


 




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


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

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