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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2012, 07:57   #1
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 326
По умолчанию Добавить в модуль книги код другим макросом

Здравствуйте Уважаемые программисты!
Подскажите пожалуйста по Excel 2003, у меня в модуле "эта книга" следующий ниже код выполняет запрос к базе в Access и загружает данные из Таблицы1 на Лист1 в Excel:

Private Sub Workbook_Open()
Application.ScreenUpdating = False
Dim dbs As DAO.Database
Dim rs1 As DAO.Recordset
On Error Resume Next
Dim Filename As Variant
Dim strFileName As String
Filename = "БазаДанных.mdb"
strFileName = Sheets("База").TextBox1
If Dir(strFileName & Filename) <> "" Then
Set dbs = DAO.OpenDatabase(strFileName & Filename, True, True, ";pwd=база")
End If
Set rs1 = dbs.OpenRecordset("SELECT * FROM ТАБЛИЦА1")
Dim i As Variant
Sheets("Лист1").Columns("A:A").Clea rContents
i = 1
Do While Not rs1.EOF
Sheets("Лист1").Cells(i, 1).Value = rs1.Fields("Номер")
i = i + 1
rs1.MoveNext
Loop
rs1.Close
Set rs1 = Nothing
dbs.Close
Set dbs = Nothing
Application.ScreenUpdating = True
End Sub

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

Dim rs2 As DAO.Recordset
Set rs2 = dbs.OpenRecordset("SELECT * FROM ТАБЛИЦА2")
Dim i As Variant
Sheets("Лист2").Columns("A:A").Clea rContents
i = 1
Do While Not rs2.EOF
Sheets("Лист1").Cells(i, 1).Value = rs2.Fields("Номер")
i = i + 1
rs2.MoveNext
Loop
rs2.Close
Set rs2 = Nothing

т.е. чтобы таким образом можно было прописать загрузку второй таблицы из базы Access?
Заранее спасибо.
ольгаг вне форума Ответить с цитированием
Старый 22.06.2012, 18:36   #2
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
Sheets("Лист2").Columns("A:A").Clea rContents
Ну эта строка точно вызовет ошибку. А в чём ограничение на ручное добавление строк в макрос?
В принципе есть возможность записать программно макрос. Только в твоём случае нужно же будет сначала найти место куда вписывать строки. Такого я не делал.
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 22.06.2012, 19:22   #3
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Пробуйте. Вписываете в ячейку А2 текст для вставки и выбираете файлы, в которые необходимо вставить.
Только учитывайте, что для работы с VBA проектом необходимо в параметрах безопасности Excel проставить доверие к VBA проекту.
Вложения
Тип файла: rar Меняем код в модуле ЭтаКнига.rar (14.8 Кб, 25 просмотров)
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 22.06.2012, 22:14   #4
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 326
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Пробуйте. Вписываете в ячейку А2 текст для вставки и выбираете файлы, в которые необходимо вставить.
Только учитывайте, что для работы с VBA проектом необходимо в параметрах безопасности Excel проставить доверие к VBA проекту.
Спасибо большое за подробный ответ!
Я обязательно попробую это сделать.
Прошу прощения за ошибку в моем коде:

Dim rs2 As DAO.Recordset
Set rs2 = dbs.OpenRecordset("SELECT * FROM ТАБЛИЦА2")
Dim i As Variant
Sheets("Лист2").Columns("A:A").Clea rContents
i = 1
Do While Not rs2.EOF
Sheets("Лист2").Cells(i, 1).Value = rs2.Fields("Номер")
i = i + 1
rs2.MoveNext
Loop
rs2.Close
Set rs2 = Nothing

Хотелось бы подробнее пояснить мою задачу:
данный код добавляет на другой лист (Лист2) данные из другой (второй) таблицы Access. Другими словами, каждая таблица Access загружает свои данные (поля) на отдельный лист Excel. И мне хотелось бы чтобы при добавлении в Access новой таблицы, можно было макросом (не заходя и не добавляя вручную) дописать в модуле "Эта Книга" код, чтобы далее при открытии книги Excel данные новой таблицы добавились на новый лист (новый лист Excel при этом будет создаваться другим макросом).
ольгаг вне форума Ответить с цитированием
Старый 22.06.2012, 23:56   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Если я правильно понял вашу задумку
Где Range("MyTable") поименованый динамичный диапазон например на первом листе

Лист2 Таблица2
Лист3 Таблица3
Лист4 Таблица7
Лист5 Таблица4
Лист6 Таблица5


Код:
Sub Get_Data()
 Dim X 
X=Sheets(1).Range("MyTable")

        For n = 1 To Ubound(X)
                Dim rs2 As DAO.Recordset
                Set rs2 = dbs.OpenRecordset("SELECT Номер FROM  " & X(n, 2))            
                Sheets(X(n, 1)).Columns("A:A").ClearContents
                rs2.Sheets(X(n, 1)).Range("A1").CopyFromRecordset rs2
                rs2.Close
                Set rs2 = Nothing
        Next
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 23.06.2012, 21:25   #6
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
И мне хотелось бы чтобы при добавлении в Access новой таблицы, можно было макросом (не заходя и не добавляя вручную) дописать в модуле "Эта Книга" код
Во первых: где должен быть макрос?
Во вторых: кто его должен запускать?
В третьих: Макрос дозаписывания макроса будет как миниум в два раза больше по объёму дозаписываемых строк
В четвёртых: сама процедура определения места дописывания довольно сложна.
Вывод: нодо менять подход!
Цитата:
И мне хотелось бы чтобы при добавлении в Access новой таблицы
это подразумевает организацию переборов всех таблиц!! И не более.
Алгоритм такой: по всем таблицам, по всем строкам, по всем полям
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить макросом Module и Function agregator Microsoft Office Excel 12 07.02.2011 17:52
открытие нескольких книг одним макросом и закрытие книг другим макросом kursant95 Microsoft Office Excel 6 27.01.2011 16:54
Добавить код макросом. agregator Microsoft Office Excel 4 02.12.2009 10:43
Копирование данных из одной рабочей книги в другую макросом. Andrey3055 Microsoft Office Excel 2 30.10.2009 22:00
Защита листа вновь созданой макросом книги. КаМММ Microsoft Office Excel 1 27.04.2009 06:14