0

そこで、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 と表示されます. わかりません. .

4

1 に答える 1

0

解決しました!以前は holddate を日付として暗くしていたので、どのような形式を指定しても、Excel の日付を返すだけでした。に変更するとDim holdingdate as string問題が解決し、日付は文字列として渡されるようになり、Access は米国/英国の日付を気にせずに喜んで食べることができます。

于 2012-12-03T16:34:18.380 に答える