VBA - 用于创建Access数据库和更新字段属性的Excel宏(日期/时间格式)

时间:2017-08-30 09:21:03

标签: excel vba ms-access adodb create-table

我有一个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申请属性,如下面的截图中所示?

enter image description here

1 个答案:

答案 0 :(得分:1)

格式仅适用于显示。真实日期值是数值。

所以使用这个:

"SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & flatPath & "]." & "[" & Application.ActiveSheet.name & "$]"

作为简单选择查询中的源。根据需要添加转化(和过滤),以确保您拥有[Start Date]的真实日期值。例如,日期可以作为文本读取,然后使用 DateValue 进行转换:

TrueStartDate: DateValue([DateColumnFromExcel])

现在,保存该查询并在构建TheSQL时将其用作源。