[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/08/17(Wed) 14:53
投稿者名:いっせー
Eメール:
URL :
タイトル:
ExcelデータをOpenRecordsetで読み込む
VB6.0です。

ExcelデータをOpenRecordsetで読み込ませていますが、不思議な現象が起きています。
MoveNextしながら一行ずつ変数に格納していきますが、最終行がExcelシート上では値が入っているに
も関わらずEmpty値になってしまいます。すぐ隣のセル値は読み込めていました。

エクセルシート自体にもマクロが使ってありまして、そのEmpty値となってしまうセルは、プルダウン
で指定した国に対する国コードが入ります。ですので直接入力しているわけではありません。
ちなみに直接手入力すると、Empty値ではなく正常に読み取れます。
それと、最終行までは正常に値が取得できます。

プログラムではなく、Excelシートの問題では、、、と思ったのですが、原因がさっぱり分からなく
て、少しでも情報があればと思い書き込みました。よろしくお願いします。

    Set gwsExcel = DBEngine.Workspaces(0)
    Set gdbExcel = gwsExcel.OpenDatabase("C:\oscs\bin\Contents\eb013051\eb013051.xls&q
uot;,
dbDriverPrompt, True, "Excel 8.0;")

    Set rsopeninfo = gdbExcel.OpenRecordset("公開先指定情報", dbOpenDynaset)

    With rsopeninfo
        Do Until .EOF
            lngLineCnt = lngLineCnt + 1

            On Error Resume Next
            strFieldCd = IIf(IsNull(.Fields(0)), "", .Fields(0))
            strJobRank = IIf(IsNull(.Fields(1)), "", .Fields(1))
            strTMC = IIf(IsNull(.Fields(2)), "", .Fields(2))
            strCommType = IIf(IsNull(.Fields(3)), "", .Fields(3))
            strArea = IIf(IsNull(.Fields(4)), "", .Fields(4))
            strCompanyCd = IIf(IsNull(.Fields(6)), "", .Fields(6))
            strdist_eur = IIf(IsNull(.Fields(14)), "", .Fields(14))     '国コード

            lngColLen = Len(strFieldCd) + Len(strJobRank) + Len(strTMC) + Len(strCommType)
+ Len(strArea) + Len(strCompanyCd)
            lngDISTLen = Len(strDIST_NAm) + Len(strDIST_CAm) + Len(strDIST_SAm) + Len
(strdist_eur)
            lngDISTLen = lngDISTLen + Len(strDIST_Afr) + Len(strDIST_NME) + Len
(strDIST_Asi) + Len(strDIST_Oce)
            If lngColLen + lngDISTLen > 0 Then
                lngRecCnt = lngRecCnt + 1
                ReDim Preserve typOpenInfo(lngRecCnt)
                With typOpenInfo(lngRecCnt)
                    .lngLineCnt = lngLineCnt
                    .strFieldNm = strFieldCd
                    .strJobRankNm = strJobRank
                    .strTMCNm = strTMC
                    .strCommTypeNm = strCommType
                    .strAreaNm = strArea
                    .strCompanyCd = strCompany
                    .lngDISTLen = lngDISTLen
                    .strdist_eur = strdist_eur      '国コード
                End With
            End If

            .MoveNext
        Loop
    End With

投稿時間:2005/08/25(Thu) 11:54
投稿者名:藤代千尋
Eメール:
URL :
タイトル:
Re: ExcelデータをOpenRecordsetで読み込む
> エクセルシート自体にもマクロが使ってありまして、そのEmpty値となってしまうセルは、プルダウン
> で指定した国に対する国コードが入ります。ですので直接入力しているわけではありません。
>
> プログラムではなく、Excelシートの問題では、、、と思ったのですが、原因がさっぱり分からなく
> て、少しでも情報があればと思い書き込みました。よろしくお願いします。

Excel の方の問題である可能性が高いですね。(^^;

プルダウンって何ですか? それが正確に分からなければ、検索して同様の事例がないか
探すことも出来ません。

プルダウンの候補:
1.入力規則のリスト
2.[フォーム]コマンドバーにあるコンボボックス(フォームまたは入力フォームという)
3.[コントロール ツールボックス]コマンドバーにあるコンボボックス(ActiveX コント
ロールまたは Microsoft Forms または MSForms または FM20 という)

1.の場合を試してみました。
○WindowsXPsp1 + Excel97 + VB6sp5 + DAO3.6
○2 列 3 行(ヘッダー行含まず)
最終行の値も取得できました。

2.3.の場合、セルに直接値が入るわけではないので、そのシートの最終行にちゃんとデー
タが入っているのか確認するのが先です。マクロが、コンボボックスからセルへの転記を
行っているのなら、そのマクロのバグで最終行のみ転記が行われていない可能性がありま
す。

そうでなければ、次のページで検索をかけて、Excel のバグでないか、DAO のバグでない
か、調べてみてください。(^^)/
「サポート技術情報検索」
hhttp://search.support.microsoft.com/search/?adv=1

投稿時間:2005/08/26(Fri) 17:13
投稿者名:いっせー
Eメール:
URL :
タイトル:
Re^2: ExcelデータをOpenRecordsetで読み込む
藤代千尋さん

レスありがとうございます。
説明不足ですいませんでした。プルダウンとは、2.[フォーム]コマンドバーにあるコンボボックス
のことです。

コンボボックスで選んだ国に対するコードが、隣のセルに入る仕組みです。セルに入れるのはマクロを
使
っています。いろいろ試したところ、最終行に限った現象ではないようで、途中の行でも起こりました

データは確かに入っています。

バグの線で調べてみます。
また何か分かりましたら教えてください。

投稿時間:2005/08/26(Fri) 17:45
投稿者名:いっせー
Eメール:
URL :
タイトル:
Re^2: ExcelデータをOpenRecordsetで読み込む(解決)
マイクロソフトの技術情報で見事HITしました!
hhttp://support.microsoft.com/default.aspx?scid=kb;ja;194124

早速、試して見たところ正常に動作しました。

ありがとうございました。