【发布时间】:2020-07-05 21:59:54
【问题描述】:
我有这个sn-p,可以将访问表导入excel。 MDB 路径在 C2 范围内,表名是 C4
有没有办法可以导入表格的属性/设计并使用 excel vba 将其写入新位置?这将用于许多具有不同技能水平且具有不同表结构的人要导入。数据最终将不得不重新访问,但我对如何确保访问中的字段属性正确感到困惑。
Sub GetData()
DeleteConnections 'remove existing connections in case they persist
Sheet4.Cells.Clear 'clear the old table
Sheets("Import").Activate
DatabaseName = Sheets("Setup").Range("C2").Value
TableName = Sheets("Setup").Range("C4").Value
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=" & DatabaseName & "" _
, _
";Mode=Share" _
, _
" Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OL" _
, _
"EDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet" _
, _
" OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Loc" _
, _
"ale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet" _
, " OLEDB:Bypass UserInfo Validation=False"), Destination:=Range("$A$1")). _
QueryTable
.CommandType = xlCmdTable
.CommandText = Array("" & TableName & "")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = _
"" & DatabaseName & ""
.ListObject.DisplayName = "" & TableName & ""
.Refresh BackgroundQuery:=False
End With
DeleteConnections 'remove the new connection
End Sub
【问题讨论】:
-
您可以为特定数据库使用
TableDefs对象。 This 会给你一些有用的开始。 -
另一种选择是使用 ADO 检查数据库架构。 an example here 会是一个好的开始。