こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ADOでエクセルファイルの件数を取得したい

エクセルvbaでadoを使って他ファイルの件数を取得することは可能でしょうか?

もともと件数を取得したいファイルは共有フォルダに入っていて、
開くのにすごく時間がかかるのでADOで試みたいのです。

しかしうまくいきません。
当方の環境は
Win7、エクセル2010です。

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_090.html
を参考にしたのですが、

Const cnsProvider = "Microsoft.Jet.OLEDB.4.0"
Const cnsExtProp = "Extended Properties"
Const cnsExcel = "Excel 8.0"
Const cnsDBName = "D:\Book1.xlsx" 'ローカルでテスト

Sub ADO_WS_TEST1()
Dim dbCon As ADODB.Connection
Dim dbRes As ADODB.Recordset
Dim GYO As Long, COL As Long
Dim strSQL As String

' Connection生成
Set dbCon = New ADODB.Connection

With dbCon
.Provider = cnsProvider
.Properties(cnsExtProp) = cnsExcel
.Open cnsDBName
End With


.Open cnsDBNameの部分で、
実行時エラー-2147467259
外部テーブルのフォーマットが正しくありません。
となります。

Excel 8.0が原因なのでしょうか?
オフィス2010でもExcel 8.0でいいのでしょうか?

ココがうまく通ったら、
"SELECT * FROM [Sheet1$]"の部分をCOUNTにして
件数が取得できるかなー
と思うのです。

リンク先を読むと、adoでやってもあまり早くはならなそうですが一応やってみたいのです。

よろしくお願いします。

投稿日時 - 2013-05-28 20:45:56

QNo.8109288

暇なときに回答ください

質問者が選んだベストアンサー

"Microsoft.Jet.OLEDB.4.0" を "Microsoft.ACE.OLEDB.12.0" に
"Excel 8.0" を "Excel 12.0" に変更してみてください。

Sub try()
  Const adOpenStatic = 3
  Const sProvider = "Microsoft.ACE.OLEDB.12.0"
  Const sExtended = "Excel 12.0"
  Const sDtSource = "D:\Book1.xlsx"
  Const sSQL = "SELECT * FROM [sheet1$]"
  Dim wkCon As Object
  Dim wkRst As Object

  Set wkCon = CreateObject("ADODB.Connection")
  With wkCon
    .Provider = sProvider
    .Properties("Extended Properties") = sExtended
    .Properties("Data Source") = sDtSource
    .Open
  End With
  Set wkRst = CreateObject("ADODB.Recordset")
  wkRst.Open sSQL, wkCon, adOpenStatic
  Debug.Print wkRst.RecordCount
  wkRst.Close
  wkCon.Close
  Set wkRst = Nothing
  Set wkCon = Nothing
End Sub

投稿日時 - 2013-05-28 23:00:52

お礼

やはり"Excel 8.0"ではダメなようですね。
そして"Microsoft.Jet.OLEDB.4.0"もダメなのですか。

この部分だけではなく、サンプルコードまで作っていただきありがとうございます。
無事件数の取得ができました。

投稿日時 - 2013-05-29 19:24:51

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問