そこで、VBA で生成されたクエリを使用して、Excel スプレッドシートから一連のレコードを Access データベースに挿入しています。
私のクエリは基本的に次のようになります。
accName = r.Offset(x, 0)
AccNum = r.Offset(x, 1)
sector = r.Offset(x, 2)
holding = r.Offset(x, 3)
holdingvalue = r.Offset(x, 4)
holdingdate = CDate(r.Offset(x, 5))
sSQL = "INSERT INTO Holdings (AccName, AccNum, Sector, Holding, HoldingValue, HoldingDate)" & _
" VALUES ('" & Replace(accName, "'", "''") & "', '" & AccNum & "', '" & sector & "', '" & Replace(holding, "'", "''") & "', '" & holdingvalue & "', #" & holdingdate & "#)"
生成されたクエリの例は次のようになります。
INSERT INTO Holdings (AccName, AccNum, Sector, Holding, HoldingValue, HoldingDate)
VALUES ('Account 123', '472700', '', 'IShares S&P 500', '54379.15', #03/12/2012#)
正しく機能していないのは、クエリの日付が英国の日付 (dd/mm/yyyy) から米国の日付 (mm/dd/yyyy) になっていることです。スプレッドシートの日付を ISO 日付 (yyyy-mm-dd) としてフォーマットしようとしましたが、cdate を使用しない場合でも、常に米国の日付になります。ここで何が起こっているのか分かりますか?
編集:コードをステップ実行してholdingdate
変数にカーソルを合わせると、「03/12/2012」と表示され、クエリは上記と同じです (つまり、holddate を と定義しているにもかかわらず、dd/mm/yyy 形式の日付を使用しholdingdate = Format(r.Offset(x, 5), "yyyy-mm-dd")
ます。セル内の日付もシリアルです (つまり、数字として表示される場合は 41246). データが入力された後にアクセスデータベースを見ると、日付は 12/03/2012 と表示されます. わかりません. .