dポイントプレゼントキャンペーン実施中!

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

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

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

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

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でやってもあまり早くはならなそうですが一応やってみたいのです。

よろしくお願いします。

A 回答 (1件)

"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
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2013/05/29 19:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!