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

投稿時間:2004/09/28(Tue) 16:31
投稿者名:kazuやん
Eメール:
URL :
タイトル:
Excel操作
VBからExcelファイルを読み込むプログラムを作成しています。

xlsをDAOで操作しているのですが、上手くいきません。
xlsファイルは正常に読み込まれています。
RecordSet.MoveNextを使い1行ずつずらして作業していますが
MsgboxでRecordSet.Fields(3)などで表示したとき実際にはxlsファイルのそのセルには
値が入力されているのにMsgboxでは空で表示されてしまいます。

xlsをExcel.Applicationを使って操作し、同じセルを参照すると
問題なく表示されます。

ちょっと気になったのはそのxlsファイルはMacのExcelで作られたファイルなのですが
関係あるのでしょうか?

投稿時間:2004/09/28(Tue) 17:01
投稿者名:kazuやん
Eメール:
URL :
タイトル:
追記
> VBからExcelファイルを読み込むプログラムを作成しています。
>
> xlsをDAOで操作しているのですが、上手くいきません。
> xlsファイルは正常に読み込まれています。
> RecordSet.MoveNextを使い1行ずつずらして作業していますが
> MsgboxでRecordSet.Fields(3)などで表示したとき実際にはxlsファイルのそのセルには
> 値が入力されているのにMsgboxでは空で表示されてしまいます。
>
> xlsをExcel.Applicationを使って操作し、同じセルを参照すると
> 問題なく表示されます。
>
> ちょっと気になったのはそのxlsファイルはMacのExcelで作られたファイルなのですが
> 関係あるのでしょうか?


問題の行を切り取って1行目に貼り付けるとDAOで操作してもセルの値を参照する事が出来てしまいます。
更にxlsファイルを加工してcsvファイルに変換してFileSystemObjectで操作しても
問題なくセルの値を参照できます。

ですので一体何が悪いのか検討が付きません。

例)DAOを使用
  Dim DB     As DAO.Database
  Dim RS     As DAO.Recordset
  Dim xlFileName As String
  Dim xlSheetName As String

  xlFileName = App.Path & "\Sample.xls"
  xlSheetName = "Sheet1" & "$"
  Set DB = OpenDatabase(xlFileName, True, True, "Excel 8.0;HDR=NO;")
  Set RS = DB.OpenRecordset(xlSheetName)

  With RS
    .MoveFirst
    .Move CLng(621)       '622行目に移動
  End With

   'ここが空で表示される
   msgbox RS.Fields(5)

  DB.Close
  Set RS = Nothing
  Set DB = Nothing

例)Excel.Applicationを使用
  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
  Dim xlSheet As Excel.Worksheet

  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Open("\Sample.xls")
  Set xlSheet = xlBook.Worksheets("Sheet1")

   'これはちゃんと表示される
  msgbox xlSheet.Cells(622,5)

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing

投稿時間:2004/09/29(Wed) 09:18
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Excel操作
同じ列内のデータに数値型と文字列型のデータが混在していませんか?
デフォルトでは8行目までのデータで多い方のデータ型で設定され、違うデータ型の
場合読み込まない(表示しない)
もし、そうであれば、下記を参考にして見てください。
  
 hhttp://www.bcap.co.jp/hanafusa/VBHLP/daoexcel.htm

投稿時間:2004/09/30(Thu) 11:40
投稿者名:kazuやん
Eメール:
URL :
タイトル:
ありがとうございました
> 同じ列内のデータに数値型と文字列型のデータが混在していませんか?
> デフォルトでは8行目までのデータで多い方のデータ型で設定され、違うデータ型の
> 場合読み込まない(表示しない)
> もし、そうであれば、下記を参考にして見てください。
>   
>  hhttp://www.bcap.co.jp/hanafusa/VBHLP/daoexcel.htm

xlsファイルの特定の項目を数値型に設定して
Set DB = OpenDatabase(FileName, False, False, "Excel 8.0;HDR=YES;")
にIMEX=1を追加する事で無事読込に成功しました。

> 同じ列内のデータに数値型と文字列型のデータが混在していませんか?
> デフォルトでは8行目までのデータで多い方のデータ型で設定され、違うデータ型の
> 場合読み込まない(表示しない)

これはDAOでxlsファイルを読み込む時の仕様なのでしょうか?

お客様にxlsファイルを作っていただいてるので型を統一するようにお願いするつもりです。
花ちゃんさんありがとうございました。