2017-08-30 5 views
2

複数のExcelワークシートのデータを単一のAccessテーブルにコピーするExcelマクロがあります。アクセスのデータをmmmm yyyyに変換する必要がある一方で、アクセスするためにそれをコピーすると、常にdd/mm/yyyyに変換されることを除いて、すべてがうまくいっています。VBA - Accessデータベースを作成し、フィールドのプロパティ(日付/時刻形式)を更新するExcelマクロ

フィールドは、「開始日」と「終了日」です。ここで

は、私のコードの抜粋です:

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

フォーマットは、表示のみのためのものです。真の日付値は数値です。

だから、これを使用します。ソースとして

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

を簡単な選択クエリで。必要に応じて変換(およびフィルタリング)を追加して、[Start Date]の実際の日付値があることを確認します。

TrueStartDate: DateValue([DateColumnFromExcel]) 

、そのクエリを保存し、TheSQLを構築する際にソースとして使用します。たとえば、日付はDATEVALUEに変換し、その後、テキストとして読み取ることができます。

+0

ありがとう、私はそれに取り組んでいます! – rGabiru

関連する問題