
お世話になります。
Access2010
Windows7 Pro
以下のページを参考にしましたが、「実行時エラー3170 インストール可能なISAMドライバーが見つかりませんでした。」と表示されてしまいます。
http://www.accessclub.jp/bbs5/0005/vba1231.html
Dim Db As DAO.Database
Dim Tbl As DAO.TableDef
Dim xlsFile As String
xlsFile = "ファイルパス"
Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる
For Each Tbl In Db.TableDefs
If Right$(Tbl.Name, 1) = "$" Or _
Right$(Tbl.Name, 2) = "$'" Then
'シート名の最後は必ず$が付きます
Debug.Print Tbl.Name
End If
Next Tbl
Db.Close
Set Db = Nothing
なお、参照設定にて「Microsoft DAO 3.6 Object Library」にチェックが入っていないことが原因かと思い、チェックを入れようとしましたが「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています。」というメッセージが表示され、チェックを入れることができません。
勉強不足で大変恐縮ですが、これらのメッセージからどういうことが分かりますでしょうか。
ご教授の程、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる
を
Set Db = OpenDatabase(xlsFile, True, True, "Excel 12.0;") '←ここで止まる
ならOffice2010では出来ましたよ?
アプリケーションのバージョンではなくファイルのバージョン指定っぽいです。
ちょっと蛇足かもしれんが、参考になると思われます。
・・・本来 Null でない Excel 列内の一部の値が Null として返されることがあります・・・
http://support2.microsoft.com/kb/194124/ja
>この名前は既に・・・
Microsoft DAO 3.6 Object Library の上位バージョンの
Microsoft Office 14.0 Access Database Engine Object Library に
チェックが入っていれば OK です。
NotFound404さま
いつもご回答ありがとうございます。
仰る通り、12にしてみたらいけました!!
Excel2010=Excelバージョン14と思って、14を指定したのですが。。
ちなみにファイルのバージョンとはどこを見れば確認できますでしょうか。
>Microsoft Office 14.0 Access Database Engine Object Library に
>チェックが入っていれば OK です。
そうでしたか。そちらのチェックは元々入っておりました。
ご教授ありがとうございます。
No.4
- 回答日時:
Access VBAにてExcelファイルのシート名を取得したい
http://answers.microsoft.com/ja-jp/office/forum/ …
でも質問されているようですが、以下に違う方法を紹介しておきます。
(ADO は使える環境になっているものとして)
Public Sub Samp1()
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim sA() As String
Dim i As Long
Const CFILE As String = "Excelファイルのフルパス"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source=" & CFILE & ";" _
& "Extended Properties='Excel 12.0'"
i = 0
Set rs = cn.OpenSchema(adSchemaTables)
While (Not rs.EOF)
ReDim Preserve sA(i)
sA(i) = Left(rs("TABLE_NAME"), Len(rs("TABLE_NAME")) - 1)
i = i + 1
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
cn.Close
'
' この後、sA の配列( 0 スタートの添え字)にシート名が入っているので、
' 続けて処理するとか
'
End Sub
※ 一応、Excel ファイルが xls でも、変更することなく動くみたい
※ 2000 / 2003 で動かすのなら、以下2か所を変更してください
Microsoft.ACE.OLEDB.12.0
↓
Microsoft.Jet.OLEDB.4.0
Excel 12.0
↓
Excel 8.0
No.3
- 回答日時:
私にExcelのことをお尋ねになるのは後悔することになるかも?
大別すると、対象とするファイルの拡張子が XLS なら 8.0 で十分ですが(Excel1997以降)、
XLSX(XLSMなども)も含めるのならなら 12.0 (Excel2007以降)です。
つまり、生(なま)のデータの入れ物としてのフォーマットは現時点では上記の二種類です。
それに各バージョンで書式や関数などが付加されている・・・と考えて良いのではと思います。
こんな処でご勘弁ください。
NotFound404さま
ご回答ありがとうございます。
そもそも「シート名を取得する」ということで、ヒットしたページに記載のあったものをコピペしただけで試した状況です。。なので、Excelのバージョン云々以前に、
Set Db = OpenDatabase(xlsFile, True, True, "Excel 12.0;")
が何をしているかも理解できておりません。
恐らくシート名を取得する為に、そのExcelファイルのパスを指定し、かつ、そのバージョンを指定している・・ぐらいしか理解できておりません。
その後の、
For Each Tbl In Db.TableDefs
If Right$(Tbl.Name, 1) = "$" Or _
Right$(Tbl.Name, 2) = "$'" Then
の部分に関してはさっぱりです。
もう少し勉強した上で質問させて頂こうと思います。
ありがとうございました。
No.1
- 回答日時:
Excelをデータベースとして開くのではなく、OLEオートメーションで操作します。
Dim APL 'アプリケーション
Dim WBS 'ワークブック・コレクション
Dim WKB 'ワークブック・オブジェクト
Dim WSS 'ワークシート・コレクション
Dim WKS 'ワークシート・オブジェクト
Dim シート数
Dim 索引
Dim シート名
Dim パス名
Dim パス名 = "~"
'Excelアプリケーションをインスタンス化する
Set APL = CreateObject("Excel.Application")
ワークブック・コレクションを取得する
Set WBS = APL.Workbooks
ワークブックを開いて、ワークブック・オブジェクトを取得する
Set WKB = WBS.Open(パス名) 'エラーハンドリング要
ワークシート・コレクションを取得する
Set WSS = WBK.WorkSheets
'シート数を取得する
シート数 = WSS.Count
'各シートについて処理する
For 索引 = 1 To シート数
'ワークシート・オブジェクトを取得する
Set WKS = WSS(索引)
'シート名を取得する
シート名 = WKS.Name
'シート名による処理
★略
'ワークシート・オブジェクトを解放する
Set WKS = Nothing
Next
'ワークシート・コレクションを解放する
Set WSS = Nothing
'ワークブックを閉じる
WKB.Close
'ワークブック・オブジェクトを解放する
Set WKB = Nothing
'ワークブック・コレクションを解放する
Set WBS = Nothing
'アプリケーションを終了する
APL.Quit
'アプリケーションを解放する
Set APL = Nothing
丁寧にコードを書きましたが、中間オブジェクトを省略することも
できます。但し、内部でどのようなことが行われているかを知れば、
中間オブジェクトを省略することが、ものすごく効率が悪いという
ことを知るべきでしょう。特に変数が静的な場合は解放を怠ると、
メモリが解放されず、重ねて使うと、メモリストレスが増大します。
尚、オブジェクトのプロパティやメソッドの引数、及び戻り値の
内部形式は全てVariant型です。そうでないものは変換されて
使用されます。このため、サンプルでは変数は全て型指定を省略
してVariant型でやっています。
OLEオートメーションではExcelのVBAと同じことができます。
但し、xl~のようなExcelマクロ固有の定数は使用できません。
nda23さま
詳しいご回答ありがとうございます。
説明不足で申し訳ございません。。。実は当該AccessはRuntime環境で利用することを想定し、作り込みを行っております。
よって、「CreateObjectを使えない」状況です。
教えて頂いた方法は今回使えませんが、大変勉強になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
このQ&Aを見た人はこんなQ&Aも見ています
-
Access VBAよりシート名を取得したい
その他(データベース)
-
accessへエクセルの複数のシートのインポートの仕方
Access(アクセス)
-
Vbaでアクセスからエクセルにリンクテーブルする
Access(アクセス)
-
-
4
ACCESSのBookmarkプロパティの使い方
その他(データベース)
-
5
AccessのDAO.ExecuteとDoCmd.RunSqlの違いについて
その他(データベース)
-
6
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
7
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
8
クエリ表示と、ADOで抽出したレコードセットが違う
Access(アクセス)
-
9
アクセスクエリ(複数)→マクロ→エクセル出力(ワークシート別)
その他(パソコン・スマホ・電化製品)
-
10
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
11
アクセスのfilter、複数条件の記述方法を教えてください。
Access(アクセス)
-
12
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
13
ACCESS VBA でのエラー解決の根拠がわかりません エラー「イベントプロパティに指定した式・・
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
ハイパーリンクでジャンプした...
-
エクセルでブック内の倍率がバ...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルのシー名を二段表示に...
-
Accessのテーブルを既存のExcel...
-
特定のシートのみ再計算させな...
-
EXCELの図形(テキストボックス)...
-
エクセルのシート連番の振り直し
-
エクセルで複数のシートに画像...
-
エクセル、特定のシートにパス...
-
エクセルの複数シートでのリン...
-
Excelでマクロ設定したが反映さ...
-
EXCELで存在しないシート...
-
DATE関数 4月31日などのあ...
-
エクセル、別のシートの表をポ...
-
エクセルで、シートの名前を変...
-
エクセル シート毎 連続で曜日...
-
Wordで差し込み印刷時に表示す...
-
EXCELの「シートの見出し」のフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
【ExcelVBA】マクロの入ったシ...
-
ハイパーリンクでジャンプした...
-
特定のシートのみ再計算させな...
-
EXCELの図形(テキストボックス)...
-
エクセルで複数のシートに画像...
-
エクセルのファイルサイズが急...
-
エクセル、特定のシートにパス...
-
Accessのテーブルを既存のExcel...
-
エクセルのシー名を二段表示に...
-
エクセルの2つのシートを並び...
-
EXCELで存在しないシート...
-
エクセルの複数シートでのリン...
-
エクセルで、シートの名前を変...
-
EXCELの「シートの見出し」のフ...
-
Wordで差し込み印刷時に表示す...
-
ワークシートそのものの色を変...
-
エクセルを開くとメニューバー...
-
エクセル、別のシートの表をポ...
おすすめ情報