投稿者 snowmansnow  (社会人) 投稿日時 2022/10/21 21:18:31

 こんばんは、いつもありがとうございます

>CreateObject("Excel.Application") では都合が悪いという状況でしょうか。
いっぱいほぼ一緒の形式のファイルがあり、値もほぼ一緒の位置にあります。
できれば開けずに、値を集約したかったです。

>> ワークブックの一番左のシート名の取得
>> (sheets(0).name みたいな)
>Excel のワークシートは 1 から始まるものだったはずでは…?
これは、自分でも気づいて修正させていただきました。

>> Set adoCat = New ADOX.Catalog
>ADODB は参照設定なしで動くようにしているのに、
>ADOX の方は CreateObject を使わず、参照設定を必須にしている点に違和感があります。
    Dim adoCat As ADOX.Catalog
   または Set adoCat = CreateObject("ADOX.Catalog")
  に、修正する形でよろしいでしょうか?

>試しに、シート名の配列を返すようにしてみました。
>今回は Excel のように 1 から始まる番号で返すようにしています。
シート名で並び替え済なのか、エクセルのシート順を変えても順が変わりません。

 シートがA、B、Cという並びでも
 シートがC、A、Bという並びでも
 A
  B
  C
 というように返してくるようでした

 シートがA、B、Cという並びでは
 A
  B
  C
 シートがC、A、Bという並びでは
  C
 A
  B
を返すようにならないでしょうか?

自分のADOXでも、SNoを調節しなくては、目的の値が取得できていません。
あるファイルでは、SNo=1、あるファイルでは、SNo=2というように

>ReDim sheetNames(1 To rs.RecordCount)
が、エラー(値が-1)になり、100決め打ちでエラー回避してみました。