Я создал таблицу Excel под названием ExcelData.xlsx с данными выборки вы поставляется отформатированный в виде таблицы:
Я тогда создал форму с кнопкой запуска некоторые VBA, которые будут импортировать данные в Access (название кнопки cmdImport):
в рамках VBA формы, я написал функцию, которая проверяет наличие таблицы или нет. Имя таблицы задается в качестве аргумента функции, то функция возвращает значение TRUE, если найдено или FALSE, если не обнаружено:
Public Function TableExists(name As String) As Boolean
' A function to check whether a table exists
' Pass the name of the table as the argument
' the function will return TRUE if found or FALSE if not found
TableExists = DCount("*", "MSysObjects", "Name = '" & name & "' AND Type = 1")
End Function
ого затем на щелчке событии кнопки cmdImport, я иметь следующее (вы должно будет заменить некоторые вещи для вашей конкретной ситуации, например, путь к файлу и имя файла из таблицы Excel):
Private Sub cmdImport_Click()
' 1 - Delete your Access table "tblProducts" so we can reset the Autonumber field
If _
TableExists("tblProducts") = True _
Then
' Delete old "tblProducts":
DoCmd.DeleteObject acTable, "tblProducts"
Else
' Do nothing as table doesn't already exist
End If
' 2 - Create and define new Access table "tblProducts"... this allows us to reset the Autonumber values for the ID fields
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fldID As DAO.Field, fldProductName As DAO.Field, fldValue As DAO.Field
Set db = CurrentDb
' Create table defintion
Set tdf = db.CreateTableDef("tblProducts")
' Create field definitions
Set fldID = tdf.CreateField("ID", dbLong)
fldID.Attributes = dbAutoIncrField
fldID.Required = True
Set fldProductName = tdf.CreateField("ProductName", dbText)
fldProductName.AllowZeroLength = False
fldProductName.Required = True
Set fldValue = tdf.CreateField("ProductValue", dbText)
fldValue.AllowZeroLength = False
fldValue.Required = True
' Append fields to table
tdf.Fields.Append fldID
tdf.Fields.Append fldProductName
tdf.Fields.Append fldValue
' Append table to db
db.TableDefs.Append tdf
' Give it a nudge
db.TableDefs.Refresh
Application.RefreshDatabaseWindow
' Clean up memory
Set fldID = Nothing
Set fldProductName = Nothing
Set fldValue = Nothing
Set tdf = Nothing
Set db = Nothing
' 3 - Check for the old imported data from Excel ("ExcelData") and delete it
If _
TableExists("ExcelData") = True _
Then
' Delete old "Excel Data":
DoCmd.DeleteObject acTable, "ExcelData"
Else
' Do nothing as table doesn't already exist
End If
' 4 - Import new data from Excel ("ExcelData")
DoCmd.TransferSpreadsheet acImport, _
9, _
"ExcelData", _
"C:/Your/File_Path/And_File_Name.xlsx", _
-1
' 5 - Append new data from "ExcelData" in to "tblProducts"
Dim sqlAppend As String
sqlAppend = "INSERT INTO tblProducts (ProductName, ProductValue)" _
& " SELECT ExcelData.ProductName, ExcelData.ProductValue" _
& " FROM ExcelData;"
CurrentDb.Execute sqlAppend
End Sub
Это должно привести в этих таблицах ..
..с новые данные в таблице tblProducts с идентификатором применяется:
Пожалуйста, обратите внимание, что этот метод полностью переписывает все, что было до того импортируемого, а затем повторно импортирует его и присваивает поле ID снова все новые данные.Это означает, что запись, которая имела, например, идентификатор 1 в предыдущем импорте, может получить другой идентификационный номер при следующем импорте в зависимости от того, изменяется ли порядок записей в электронной таблице Excel при новом импорте.
спасибо за ваше решение. Я сделал это кругом. Я просто вручную импортировал его в первый раз и со следующего раза, когда я его добавлю. –