我有一个Excel宏,可将数据从多个Excel工作表复制到单个Access表中。一切都运行良好,除了访问中的数据应转换为mmmm yyyy
,而当我将其复制到访问时,它总是转换为dd/mm/yyyy
。
字段为“开始日期”和“结束日期”。
以下是我的代码摘录:
Dim Catalog As Object
Dim cn As ADODB.connection
Dim dbPath as String, scn as String
dbPath = CPTwb.Path & "\Flatfile.accdb"`
scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";"
Set Catalog = CreateObject("ADOX.Catalog")`
Catalog.Create scn
Set Catalog = Nothing
Set cn = New ADODB.connection
With cn
.Open scn
.Execute "CREATE TABLE Flatfile ([Tracker Product] text(255) WITH
Compression, " & "[Contract ID] text(255) WITH Compression, " & _
"[Client] text(255) WITH Compression, " & _
"[Start Date] datetime, " & "[End Date] datetime)"
End With
TheSQL = "INSERT INTO Flatfile ([Tracker Product], [ContractID], [Client],[Start Date], [End Date])"
TheSQL = TheSQL & "SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & flatPath & "]." & "[" & Application.ActiveSheet.name & "$]"
cn.Execute TheSQL
cn.close
我理解属性“datatime”总是将值作为系统日期获取,并且无法通过DDL进行编辑。
有没有办法通过VBA申请属性,如下面的截图中所示?
答案 0 :(得分:1)
格式仅适用于显示。真实日期值是数值。
所以使用这个:
"SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & flatPath & "]." & "[" & Application.ActiveSheet.name & "$]"
作为简单选择查询中的源。根据需要添加转化(和过滤),以确保您拥有[Start Date]
的真实日期值。例如,日期可以作为文本读取,然后使用 DateValue 进行转换:
TrueStartDate: DateValue([DateColumnFromExcel])
现在,保存该查询并在构建TheSQL
时将其用作源。