ADO ( ) を使用して Excel 2003 から Access 2003 にスプレッドシートをインポートしていますProvider = "Microsoft.Jet.OLEDB.4.0"
。ただし、日付フィールドにいくつかのテキスト エントリがあります。ご想像のとおり、これらは#Num!
値として表示されます。
私がやりたいのは、問題のあるフィールドを次のようにラップすることですIIf(IsDate(FIELDNAME),FIELDNAME,#1/1/1900#)
。ただし、これでも#Num!
. IsDate()
、IsDate(CVar())
、IsError()
、IsError(CDat())
、およびのテストも同様VBAFunctionThatReturns0GivenAnyValue(FIELDNAME)
です。
誰でも私が使用できるラッパー関数のアイデアを持っていますか? 私は多かれ少なかれ私の機知に富んでいますか?
注: インポートされたデータを制御できないため、スプレッドシートを修正することはできません。また、インポート関数自体で特定のハッカーを回避したいと思います (たとえば、代わりに TransferSpreadsheet を使用します)。目標は、データを取り込むために同じアプローチを使用することです。機能しないビットは無視してください。
また、ここで日付以外の値を破棄することが適切であることも指摘する必要があります。テキストとしてインポートすることは、理想的には避けたいものです。これは、チェーンのさらに下にある他のあらゆる種類のエラーを引き起こすためです。
編集: 2003 年の規定を追加しました。環境にインストールされている .Net フレームワークのバージョンには、ACE.12.0 プロバイダーが含まれていない (または含まれていないように見える) ことも指摘しておく必要があります。
編集 2: 要求に応じて、実行中の SQL の (少しクリーンな) バージョンを次に示します。正確なクエリではないことに注意してください。ただし、同じスプレッドシートでこれを実行すると、同じ問題が発生します。
SELECT
CStr(Nz([Notes], "")),
[ID],
[Date]
INTO
[;DATABASE=C:\DatabaseTarget.Mdb].[tblImport]
FROM
[Excel 8.0;Database=C:\ExcelSheet.xls].[sheet1$]
WHERE
[ID] IS NOT NULL
INTO
この問題は、句を取り出しての値を見るとわかります[Date]
。それらのいずれかが#Num!
次の結果である場合でも#Num!
、すべての Test1-5 に対して s が発生し、むしろ問題を示しています。
SELECT
CStr(Nz([Notes], '')),
[ID],
CStr(Nz([Date],'')) As [Test1],
IsError([Date]) As [Test2],
IsDate([Date]) As [Test3],
IsNull([Date]) As [Test4],
IIf(True, 1, [Date]) As [Test5],
FROM
[Excel 8.0;Database=C:\ExcelSheet.xls].[sheet1$]
WHERE
[ID] IS NOT NULL