|
まさ7251 さん、レスありがとうございます。
説明不足ですみません。
>> エクセルシートをdrs2として開き、
>
>とは、具体的にどうやっているのですか?
Set dcn1 = CurrentDb
Set drs1 = dcn1.OpenRecordset(a, dbOpenDynaset)
Set dcn2 = OpenDatabase(xFilename, False, False, "Excel 8.0;")
Set drs2 = dcn2.OpenRecordset(xSheetName)
というように、開いて(操作して?)います。
xFilename、xSheetNameは複数の同形式のファイル・シートを扱いますので、
取り込むファイル名、シート名は変数で持っています。
>> If IsNull(drs2.Fields(3)) Or drs2.Fields(3) = "" Then
>Fields(3)とありますけど、
>>商品名・値段と2つのフィールドがあるエクセルデータ
>ではないのですか?
詳しくは、エクセルは 分類・商品名・詳細・値段 のフィールドがあります。
分類 = drs2.Field(0)
商品名 = drs2.Field(1)
詳細 = drs2.Field(2)
値段 = drs2.Field(3)
>とりあえず、これだけの情報では、原因は思いつきません。
>drs2.Fields(3)
>これに、どのような値が入っているのかを
>確認してみてはどうでしょうか。
プログラム上でデバックをして、値の変化を追っていきましたが、
例えばエクセルには250と入力されている箇所でもNullと判断されています。
問題のエクセルは、いくつかのクライアントに入力してもらい、
その入力してもらったものを取り込むというものです。
元のフォーマットはこちらで作り、勝手に変更できないよう、
入力が必要なセル以外はプロテクトをかけてあります。
実は、中にはきちんとインポートされているものもあります。
エクセル内に何か不要なデータが入力されていないかとも思い、
CSV形式で吐き出し、空白等が入力されていないかも確認しましたが、
特に問題はありませんでした。
また、エクセルは各国から取り寄せているため、入力されたフォントに
問題があるのかとも考えましたが、こちらも問題ありませんでした。
以上のことから、Accessのプログラムがいけないのか、
Excel側がいけないのかすら、分からないのです。
念のためこれからエクセルシートを新しく作り直してみます。
説明が下手で、分かりにくいかもしれません。
また長文になりましたが、どうぞ宜しくお願い致します。
|
|