Как открыть access из excel vba
Репутация: 1
Всего: 1
Господа!
Очень хочется из MS Excel VBA открыть форму, которая создана в MS Access.
Код |
objAccess.DoCmd.OpenForm "EditPaysOrder" objAccess.Visible = True |
Открывает форму вместе с Access, а он то мне и не нужен. Я, помню, что окрывал подобным образом формы, но как я уже не помню :-(
Репутация: нет
Всего: 10
Использование Access в качестве сервера автоматизации
(Сорри если не подходит, сегодня малость торможу)
демонстрация работы Microsoft Access в качестве клиента автоматизации. Но это приложение является одновременно и сервером автоматизации, т. е. Access может предоставлять объекты своей объектной модели для использования другим приложениям. Это значит, что другие приложения Microsoft Office могут программно управлять объектами Access.
Пример, когда из приложения Excel открывается база данных Access и данные из таблицы экспортируются в активный лист рабочей книги Excel.
Dim objAccess As Access.Application
Dim db As Database
Dim rst As Recordset
Dim i As Integer, j As Integer
Set objAccess = GetObject("D:XBopeu.mdb")
Set db = objAccess.CurrentDb
Set rst = db.OpenRecordset("Например оборот за месяц")
' заполняем 1-ю строку заголовками столбцов таблицы
For i = 1 То rst.Fields.Count - 1
Cells(1, i) = rst.Fields(i).name
Next i
' переносим все остальные строки таблицы
j = 2
rst.-MoveFirst Do Until rst.EOF
For i = 1 To rst.Fields.Count - 1
Cells (j, i) = IlfdsNull (rst. Fields (i) ), 0, rst. Fields (i) )
Next i
j = j + 1
rst.moveNext Loop
objAccess.Close
Set obAccess = Nothing
Перед тем как создавать эту функцию, необходимо создать две ссылки в редакторе VBA Excel: на библиотеки Microsoft Access 10.0 Object Library и Microsoft DАО 3.6 Object Library. Создав объект Access .Application, можно получить доступ ко всём остальным объектам Access: таблицам, формам, отчетам. В данной программе сначала создается объект Recordset из нужной таблицы, а затем в цикле создается строка заголовков полей и переносятся все данные.
Запрещается!
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
- Литературу по VB обсуждаем здесь
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Вопросы по реализации алгоритмов рассматриваются здесь
- Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
- FAQ раздела лежит здесь!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
[ Время генерации скрипта: 0.1158 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Используйте метод OpenCurrentDatabase для открытия существующей базы данных Microsoft Access в качестве текущей базы данных.
Синтаксис
выражения. OpenCurrentDatabase (filepath, Exclusive, bstrPassword)
выражение: переменная, представляющая объект Application.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
filepath | Обязательный | String | Имя существующего файла базы данных, включая имя пути и расширение имени файла. |
Эксклюзив | Необязательный | Логический | Указывает, хотите ли вы открыть базу данных в эксклюзивном режиме. По умолчанию значение False указывает, что база данных должна быть открыта в общем режиме. |
bstrPassword | Необязательный | String | Пароль для открытия указанной базы данных. |
Возвращаемое значение
Примечания
Используйте этот метод для открытия базы данных из другого приложения, которое управляет Microsoft Access с помощью автоматизации, ранее называемой автоматизацией OLE. Например, метод OpenCurrentDatabase можно использовать из Microsoft Excel, чтобы открыть примерную базу данных Northwind.mdb в окне Access. После создания экземпляра Access из другого приложения необходимо также создать новую базу данных или указать конкретную базу данных для открытия. Эта база данных открывается в окне Access.
Если вы уже открыли базу данных и хотите открыть другую базу данных в окне Access, вы можете использовать метод CloseCurrentDatabase для закрытия первой базы данных перед открытием другой.
Используйте метод OpenAccessProject для открытия существующего проекта Access (.adp) в качестве текущей базы данных.
Не путайте метод OpenCurrentDatabase с методом open ActiveX объектов данных (ADO ) или методом OpenDatabase объекта доступа к данным (DAO). Метод OpenCurrentDatabase открывает базу данных в окне Access. Метод DAO OpenDatabase возвращает переменную объекта Базы данных, которая представляет определенную базу данных, но фактически не открывает эту базу данных в окне Access.
Пример
В следующем примере откроется база данных Access из другого приложения с помощью автоматизации, а затем откроется форма в этой базе данных.
Этот код можно ввести в Visual Basic в любом приложении, которое может выступать в качестве компонента COM. Например, можно запустить следующий код из Excel, Visual Basic или Access.
Когда переменная, указывая на объект Application , выходит за рамки области, экземпляр Access, который он представляет, также закрывается. Поэтому следует объявить эту переменную на уровне модуля.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Макрокоманду ИмпортЭкспортЭлектроннойТаблицы можно использовать для импорта или экспорта данных между текущей базой данных Access (MDB или ACCDB) и файлом электронной таблицы. Вы также можете связать данные в электронной таблице Excel с текущей базой данных Access. Это позволит просматривать данные через Access, при этом не теряя возможность работы с ними в Excel. Кроме того, вы можете связать данные в файле электронной таблицы Lotus 1-2-3, но они также будут доступны в Access только для чтения.
Примечание: В Access 2010 макрокоманда ПреобразоватьЭлектроннуюТаблицу была переименована в ИмпортЭкспортЭлектроннойТаблицы.
Примечание: Эта макрокоманда доступна только для доверенных баз данных.
Настройка
Макрокоманда ИмпортЭкспортЭлектроннойТаблицы имеет следующие аргументы:
Аргумент макрокоманды
Тип преобразования
Нужный тип преобразования. В поле Тип преобразования в разделе Аргументы макрокоманды в окне конструктора макросов можно выбрать значение Импорт, Экспорт или Связь. Значение по умолчанию — Импорт.
Примечание: Тип преобразования Связь не поддерживается для проектов Access (ADP).
Тип электронной таблицы
Тип электронной таблицы для импорта, экспорта или связи. В этом поле можно выбрать один из типов электронной таблицы. Значение по умолчанию — Книга Excel.
Примечание: Можно импортировать данные из WK4-файлов Lotus или связать их (с доступом только для чтения), но нельзя экспортировать данные Access в этот формат. Кроме того, Access больше не поддерживает импорт, экспорт и связывание данных с помощью этой макрокоманды для WKS-файлов Lotus и электронных таблиц Excel версии 2.0. Если вы хотите импортировать или связать данные электронной таблицы в формате Excel версии 2.0 или Lotus WKS, необходимо преобразовать данные электронной таблицы в формат более поздней версии Excel или Lotus 1-2-3, прежде чем импортировать или связывать их.
Имя таблицы
Имя таблицы Access для импорта, экспорта или связывания данных электронной таблицы. Вы также можете ввести имя запроса на выборку Access, из которого следует экспортировать данные. Это обязательный аргумент.
Если для аргумента Тип преобразования выбрано значение Импорт, Access добавит данные электронной таблицы в указанную таблицу, если она уже существует. В противном случае Access создает новую таблицу для данных.
При использовании макрокоманды ИмпортЭкспортЭлектроннойТаблицы невозможно задать данные для экспорта с помощью инструкции SQL. Вместо этого необходимо сначала создать запрос, а затем указать имя запроса в аргументе Имя таблицы.
Имя файла электронной таблицы для импорта, экспорта или связи. Следует указывать полный путь. Это обязательный аргумент.
При экспорте данных из Access создается новая электронная таблица. Если имя файла совпадает с именем существующей электронной таблицы, Access заменяет ее, кроме случая экспорта в книгу Excel версии 5.0 или более поздней. В этом случае Access копирует экспортируемые данные в следующий доступный новый лист в книге.
При импорте или связывании электронной таблицы Excel версии 5.0 или более поздней можно указать отдельный лист с помощью аргумента Диапазон.
С именами полей
Указывает, должна ли первая строка электронной таблицы содержать имена полей. Если выбрано значение Да, Access использует имена в этой строке как имена полей в таблице Access при импорте или связывании электронной таблицы. Если выбрано значение Нет, Access обрабатывает первую строку как обычную строку данных. По умолчанию используется значение Нет.
При экспорте таблицы или запроса на выборку Access в электронную таблицу имена полей записываются в первую строку электронной таблицы независимо от значения этого аргумента.
Диапазон ячеек для импорта или связи. Чтобы импортировать или связать электронную таблицу целиком, оставьте этот аргумент пустым. Вы можете ввести имя диапазона в электронной таблице или указать диапазон ячеек для импорта или связи, например А1:Е25 (обратите внимание, что синтаксис А1..Е25 не работает в Access 97 и более поздних версиях). При импорте или связывании электронной таблицы Excel версии 5.0 или более поздней можно добавить имя листа и восклицательный знак перед диапазоном; например: Бюджет!А1:В7.
Примечание: При экспорте в электронную таблицу необходимо оставить этот аргумент пустым. Если задать диапазон, экспорт завершится сбоем.
Примечания
Вы можете экспортировать данные запросов на выборку Access в электронные таблицы. Access экспортирует результирующий набор запроса, обрабатывая его так же, как таблицу.
Данные электронной таблицы, которые добавляются в существующую таблицу Access, должны соответствовать ее структуре.
Каждое поле в электронной таблице должно иметь тот же тип данных, что и соответствующее поле в таблице Access.
Поля должны следовать в том же порядке (за исключением случая, когда для аргумента С именами полей задано значение Да: в этом случае названия полей в электронной таблице должны совпадать с именами полей в таблице Access).
Вызов данной макрокоманды аналогичен выбору Excel в группе Импорт или Экспорт на вкладке Внешние данные. Вы можете использовать эти команды, чтобы выбрать источник данных (базу данных Access или другого типа, электронную таблицу или текстовый файл). Если выбрана электронная таблица, на экране последовательно появляются диалоговые окна или запускается мастер Access, в котором можно указать имя электронной таблицы и другие параметры. Аргументы макрокоманды ИмпортЭкспортЭлектроннойТаблицы отражают параметры, заданные в этих диалоговых окнах или мастерах.
Примечание: В запросах и фильтрах для связанной электронной таблицы учитывается регистр.
При связывании с электронной таблицей Excel, открытой в режиме редактирования, Access будет ждать окончания работы электронной таблицы Excel в этом режиме, чтобы завершить связывание; при этом нет ограничений по времени.
Чтобы выполнить макрокоманду ИмпортЭкспортЭлектроннойТаблицы в модуле Visual Basic для приложений (VBA), используйте метод TransferSpreadsheet объекта DoCmd.
Метод TransferSpreadsheet выполняет действие TransferSpreadsheet в Visual Basic.
Синтаксис
выражение.TransferSpreadsheet (TransferType, SpreadsheetType, TableName, FileName, HasFieldNames, Range, UseOA)
выражение: переменная, представляющая объект DoCmd.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
TransferType | Необязательный | AcDataTransferType | Нужный тип переноса. Значение по умолчанию — acImport. |
SpreadsheetType | Необязательный | AcSpreadSheetType | Тип электронной таблицы для импорта, экспорта или связи. |
TableName | Необязательный | Variant | Строковое выражение, являющееся именем таблицы Office Access, предназначенной для импорта данных электронной таблицы, экспорта данных электронной таблицы или связывания данных электронной таблицы, или запрос на выборку Access, результаты которого нужно экспортировать в электронную таблицу. |
FileName | Необязательный | Variant | Строковое выражение, являющееся именем и путем электронной таблицы для импорта, экспорта или связывания. |
HasFieldNames | Необязательный | Variant | Используйте значение True (1), чтобы использовать первую строку электронной таблицы в качестве имен полей при импорте или связывании. Используйте значение False (0), чтобы считать первую строку электронной таблицы обычными данными. Если оставить этот аргумент пустым, предполагается, что используется значение по умолчанию (False). При экспорте таблицы или данных запроса на выборку Access в электронную таблицу имена полей записываются в первую строку электронной таблицы независимо от введенного значения этого аргумента. |
Range | Необязательный | Variant | Строковое выражение, являющееся допустимым диапазоном ячеек или именем диапазона в электронной таблице. Этот аргумент применяется только для импорта. Чтобы импортировать электронную таблицу целиком, оставьте этот аргумент пустым. При экспорте в электронную таблицу необходимо оставить этот аргумент пустым. Если ввести диапазон, экспорт завершится сбоем. |
UseOA | Необязательный | Variant | Этот аргумент не поддерживается. |
Примечания
Используйте метод TransferSpreadsheet для импорта или экспорта данных между текущей базой данных Access или проектом Access (ADP) и файлом электронной таблицы. Вы также можете связать данные в электронной таблице Excel с текущей базой данных Access. Это позволит просматривать и изменять данные электронной таблицы с помощью Access, при этом не теряя возможность полного доступа к ним в Excel. Кроме того, вы можете связать данные в файле электронной таблицы Lotus 1-2-3, но они будут доступны в Access только для чтения.
Также можно использовать объекты данных ActiveX (ADO) для создания связи с помощью свойства ActiveConnection для объекта Recordset.
Пример
В следующем примере импортируются данные из указанного диапазона электронной таблицы Lotus Newemps.wk3 в таблицу Employees (Сотрудники) Access. В качестве имен полей используется первая строка электронной таблицы.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Excel: умный импорт из Excel листа в таблицу Access
Всем привет, помогите разобраться с нижеизложенным.
Что Дано:
Есть книга Excel "C:\Data\test.xls". В этой книге есть лист "output", с таблицей данных (первая строка - название полей).
Есть база Access "C:\Data\myData.mdb.xls". В этой базе есть таблица "test" с данными.
Что надо сделать:
Необходимо создать макрос в Excel, который бы вставлял данные из листа output, в таблицу "test", причем если в таблице "test" есть уже такие данные (определяется по трем ключевым полям), то их необходимо заменить. Т.е. не должно быть дублированых записей в таблице "test". Этим макросом я буду пополнять ежедневно данные в таблице "test", либо заменять уже существующие (на верные или скорректированные).
В чем проблема:
Я не знаю как создать таблицу (объект?) с дынными из Excel, что бы:
a. проверить есть ли такие же записи в таблице "test" (если есть, то удалить их из "test" и залить заново)
b. Вставить их в access.
Все это я буду делать (уже делаю) через ADO. Сейчас копаюсь в книгах и инете - не нашел примеров создания таблицы (recordset'а) в Excel, копированием/выделением/селектом диапазона ячеек. Помогите пожалуйста, горит.
Решать такую задачу со стороны Excel сложнее чем из Access, в котором достаточно выполнить два запроса, один на обновление второй на добавление.
В Вашем варианте можно сделать следующее:
создать рекордсет ADO в Excel,
заполнить его данными из листа "output",
открыть рекордсет с набором записей таблицы "test"
фильтром и перебором всех записей произвести сравнение, для редактирования или добавления записей.
Все эти процедуры и библиотека ADO должны присутствовать в проекте VBA файла xls.
Евгений.
Получается последовательность такая:
1создать рекордсет ADO в Excel,
2заполнить его данными из листа "output",
22 Подконнектится
3открыть рекордсет с набором записей таблицы "test"
4фильтром и перебором всех записей произвести сравнение, для редактирования или добавления записей.
Как раз проблема с пп. 1 и 2 - я не знаю что прописать.
Dim xlsRecordSet as ADODB.Recordset
Set xlsRecordSet = New ADOD.Recordset
Const ConnectionString As String = _
"Provider = Microsoft.Jet.OLEDB.4.0;" + _
"Data Source = C:\Data\myData.mdb;Persist Security Info=False"
Dim Connection As ADODB.Connection
Set Connection = New ADODB.Connection
If Connection.State = ObjectStateEnum.adStateOpen Then objConn.Close
If Connection.State = ObjectStateEnum.adStateOpen Then objConn.Close
Как рекордсет создается и заполняется Вы можете посмотреть в коде.
Также его можно сортировать и передавать в массив ( это для примера ).
Dim rs As Object , i% , V ()
Set rs = CreateObject ( "ADODB.Recordset" ) 'создание рекордсета
rs.Fields.Append "Fld" , 200 , 255 ' добавление поля в рекордсет
rs.Open 'открываем рекордсет
rs.AddNew 'добавление записи в реккордсет
rs ( 0 ) = "Text" 'ввод данных
rs.Sort = "Fld" 'имя поля сортировки "Fld desk" - по убыванию
V = rs.GetRows 'при необходимости передаем все содержимое рекордсета в массив
rs.Close ' закрываем рекордсет
Set rs = Nothing ' очищаем переменную для освобождения памяти
Организовать циклы добавления нужного количества полей , сбора данных листа и заполнения полей рекордсета , надеюсь Вы сможете самостоятельно.
'=======================================================================В цикле перебора набора записей, создается строчная переменная содержащая значение поля рекордсета
sSql = "INSERT INTO Table1 ( Fld1 ) SELECT '" & rs ( 1 ) & "'" 'текст момещается в апострофы
Читайте также: