Доступ к таблицам VBA - обновление, подсчет, удаление, создание, переименование, экспорт

Это руководство научит вас работать с таблицами доступа с помощью VBA.

Доступ к таблицам VBA

Для начала продемонстрируем простые команды для работы с таблицами в Access. Позже в этом руководстве мы покажем вам полный набор профессионально разработанных функций для работы с таблицами в Access.

Создать таблицу

Этот код будет использовать SQL для создания таблицы с именем «Таблица1» с полями «ID» и «Имя»:

 Уменьшить имя_таблицы в виде строки Уменьшить поля в виде строки table_name = "Table1" fields = "([ID] varchar (150), [Name] varchar (150))» "CurrentDb.Execute" CREATE TABLE "& table_name & fields

Закрыть таблицу

Эта строка кода VBA закроет таблицу (с сохранением изменений):

DoCmd.Close acTable, «Table1», acSave Да

Чтобы закрыть таблицу без сохранения:

DoCmd.Close acTable, «Таблица1», acSaveNo

Удалить таблицу

Этот код удалит таблицу (примечание: сначала таблица должна быть закрыта):

DoCmd.Close acTable, «Table1», acSaveYes DoCmd.DeleteObject acTable = acDefault, «Table1»

Переименовать таблицу:

Эта строка кода переименует таблицу доступа:

DoCmd.Rename "Table1", acTable, "Table1_New"

Другой вариант - использовать свойство TableDefs объекта базы данных.

Установите tdf = db.TableDefs (strOldTableName) tdf.Name = strNewTableName

Пустая / Очистить таблицу

Этот код VBA очистит таблицу:

DoCmd.RunSQL "УДАЛИТЬ * ИЗ" & "Таблица1"

Обрезать таблицу / Удалить записи

Эта строка кода VBA использует SQL для удаления записей из таблицы, соответствующих определенным критериям:

DoCmd.RunSQL ("УДАЛИТЬ * ОТ" & "Таблица1" & "ГДЕ" & "число = 2")

Экспорт таблицы в Excel

Чтобы экспортировать таблицу в Excel, используйте DoCmd.OutputTo метод:

DoCmd.OutputTo acOutputTable, «Table1», acFormatXLS, «c: \ temp \ ExportedTable.xls»

или используйте DoCmd.TransferSpreadsheet метод:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, «Table1», «c: \ temp \ ExportedTable.xls», True

Обновить таблицу

Следующий код обновит запись без отображения предупреждающего сообщения:

DoCmd.SetWarnings (False) DoCmd.RunSQL «Обновить ProductsT SET ProductsT.ProductName = 'Product AAA' WHERE (((ProductsT.ProductID) = 1))»

Доступ к табличным функциям VBA

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

Счетчик записей в таблице

Эта функция подсчитает количество записей в таблице:

Открытая функция Count_Table_Records (TableName As String) As Integer On Error GoTo Err: Dim r As DAO.Recordset Dim c As Integer Set r = CurrentDb.OpenRecordset ("Выбрать счетчик (*) как rcount из" & TableName) .OpenRecordset If (r .EOF) Then c = 0 Else c = Nz (r! RCount, 0) End If Count_Table_Records = c Exit Function Err: Call MsgBox ("Произошла ошибка:" & Err.Description, vbExclamation, "Error") End Function ' Пример использования Private Sub Count_Table_Records_Example () MsgBox (Count_Table_Records ("Table1")) End Sub

Проверить, существует ли функция таблицы

Эта функция проверяет, существует ли таблица, возвращая ИСТИНА или ЛОЖЬ:

Общедоступная функция TableExists (ByVal strTableName As String) As Boolean 'Функция: Определить, существует ли таблица в базе данных Access' Аргументы: strTablename: Имя таблицы для проверки Dim tdf As DAO.TableDef При ошибке Возобновить следующий Установить tdf = CurrentDb.TableDefs (strTableName ) TableExists = (Err.Number = 0) Завершить функцию

Вот пример используемой функции:

Private Sub TableExists_Example () Если VBA_Access_Checks.TableExists ("Table") = True Then MsgBox ("Таблица была найдена!") Else MsgBox ("Таблица не найдена!") End If End Sub

Создать табличную функцию

Эта функция создаст таблицу в Access VBA в текущей базе данных:

Открытая функция CreateTable (table_fields как String, table_name As String) As Boolean Dim strCreateTable As String Dim intCount As Integer Dim strFields () As String Dim strValues ​​() As String Dim strInsertSQL As String Dim intCounter As Integer Dim intData As Integer On Error GoTo Err strFields = Split (table_fields, ",") strCreateTable = "CREATE TABLE" & table_name & "(" For intCounter = 0 To UBound (strFields) - 1 strCreateTable = strCreateTable & "[" & strFields (intCounter) & "] varchar ( 150), «Далее, если справа (strCreateTable, 1) =», «Тогда strCreateTable = Left (strCreateTable, Len (strCreateTable) - 1) strCreateTable = strCreateTable &») «Конец, если CurrentDb.Execute strCreateTable If intCounter = 0 Err.Number = 0 Then CreateTable = True Else CreateTable = False End If Exit Function Err: CreateTable = False MsgBox Err.Number & "" & Err.Description End Function

Эта функция вернет ИСТИНА, если таблица создана успешно, или ЛОЖЬ, если таблица не создана.

Вы можете вызвать функцию так:

Частная подпрограмма CreateTable_Example () Вызов CreateTable ("f1, f2, f3, f4", "ttest") End Sub

Функция удаления / удаления таблицы

Эта функция удалит таблицу, если она существует:

Открытая функция DeleteTableIfExists (TableName As String) Если не IsNull (DLookup ("Name", "MSysObjects", "Name = '" & TableName & "'")), то DoCmd.SetWarnings False DoCmd.Close acTable, TableName, acSaveYes DoCmd. DeleteObject acTable = acDefault, TableName Debug.Print «Таблица» & TableName & «удалено…» DoCmd.SetWarnings True End If End Функция

Вы можете вызвать функцию так:

Частная подпрограмма DeleteTableIfExists_Example () Вызов DeleteTableIfExists ("Table1") End Sub

Функция пустой таблицы

Эта функция очистит таблицу, если она существует:

Открытая функция EmptyTable (TableName As String) Если не IsNull (DLookup ("Name", "MSysObjects", "Name = '" & TableName & "'")), то DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM" & TableName Debug.Print «Таблица» & Имя таблицы & «очищено…» DoCmd.SetWarnings True End If End Функция

Вы можете вызвать функцию так:

Частная подпрограмма EmptyTable_Example () Вызов EmptyTable ("Table1") End Sub

Переименовать функцию таблицы

Эта функция VBA переименует таблицу:

Открытая функция RenameTable (ByVal strOldTableName как строка, ByVal strNewTableName как строка, необязательный strDBPath как строка) As Boolean Dim db As DAO.Database Dim tdf As TableDef 'Ловушка для любых ошибок. При ошибке Resume Next 'Если имя базы данных пусто … If Trim $ (strDBPath) = "" Then' … тогда установите Db на текущую Db. Установите db = CurrentDb () Else 'В противном случае установите Db в указанную открытую базу данных. Установите db = DBEngine.Workspaces (0) .OpenDatabase (strDBPath) 'Проверьте, произошла ли ошибка. Если Err Then 'MsgBox "Не удалось найти базу данных для открытия:" & strDBPath RenameTable = False Завершение функции Завершение Если завершение Если ObjectExists ("Таблица", strOldTableName, strDBPath) Затем Установите tdf = db.TableDefs (strOldTableName) tdf.Name = strNewTableName db.Close RenameTable = True Else RenameTable = False End If End Пример использования функции Private Sub RenameTable_Example () Вызов RenameTable ("table1", "table2") End Sub

Вы можете вызвать функцию так:

Private Sub RenameTable_Example () Вызов RenameTable ("table1", "table2") End Sub

Обрезать / удалить записи из таблицы

Эта функция удалит записи из таблицы с обработкой ошибок:

Открытая функция Delete_From_Table (TableName as String, Criteria as String) On Error GoTo SubError DoCmd.SetWarnings False DoCmd.RunSQL («DELETE * FROM» & TableName & «WHERE» & Criteria) DoCmd.SetWarnings True SubExit: Exit Function Subgror: Ошибка Delete_From_Table: "& vbCrLf & Err.Number &": "& Err.Description Resume SubExit End Function 'Пример использования Public Sub Delete_From_Table_Example () Вызов Delete_From_Table (" Table1 "," num = 2 ") End Sub

Экспорт таблицы в Excel

Эта строка кода экспортирует таблицу в Excel (новую электронную таблицу):

DoCmd.OutputTo acOutputTable, «Table1», acFormatXLS, «c: \ temp \ ExportedTable.xls»

Или вы можете использовать эту функцию:

Общедоступная функция Export_Table_Excel (TableName As String, FilePath As String) DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, True End Function 'Пример использования Sub Export_Table_Excel_Example () Export_Table_Excel ("Table1", "corted: Конец подписки

Приведенный выше код будет экспортирован в новую электронную таблицу. Вместо этого вы можете добавить таблицу к существующей электронной таблице. В нашей статье об импорте / экспорте в Access VBA это рассматривается более подробно.

Добавить / добавить записи в таблицу

Эта функция добавит / добавит запись в таблицу:

Открытая функция Append_Record_To_Table (TableName As String, FieldName As String, FieldValue As String) При ошибке GoTo SubError Dim rs As DAO.Recordset Dim SQL As String Dim CurrentYear As Integer Set rs = CurrentDb.OpenRecordset (TableName) rs.AddNew rs (FieldName) rs (FieldName) .Value = FieldValue rs.Update rs.Close Set rs = Nothing SubExit: Exit Function SubError: MsgBox "Ошибка RunSQL:" & vbCrLf & Err.Number & ":" & Err.Description Resume SubExit End Function 'Пример использования Private Sub Append_Record_To_Table_Example () Вызвать Append_Record_To_Table ("Table1", "num", 3) End Sub

Добавить запись в таблицу из формы

Эта функция добавит запись в таблицу из формы:

Открытая функция Add_Record_To_Table_From_Form (TableName As String) При ошибке GoTo SubError Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset (TableName) rs.AddNew 'rs! [Field1] = Value1' rs! [Field2] = [Value2 'rs! [Field2] = [Value2' rs! [Field2] = [Value2 'rs! Поле3] = Значение3 rs.Update rs.Close Set rs = Nothing SubExit: Exit Function SubError: MsgBox "Refresh_Form error:" & vbCrLf & Err.Number & ":" & Err.Description End Function

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave