プロが教えるわが家の防犯対策術!

クライアントのデータベースが入っているエクセルファイルを参照して請求書を作るマクロなのですが、検索画面に任意の文字を入れて検索をかけると「実行時エラー1004 一般ODBCエラー」とでます。デバックをすると「.Refresh BackgroundQuery:=False」のところでエラーの黄色いハイライトがでてしまいます。ネット上に存在する同じような質問の回答で「IEの一時ファイルと履歴を削除したり、一時ファイルの容量を増やすとなぜか直る場合がある」とありましたが、もちろん直りませんでした。。

長いので2回に分けて貼りたいと思います。
どなたかご教授宜しくお願い致します。


Private Sub CommandButton1_Click()
Worksheets("Temp").Cells.ClearContents
With Worksheets("Temp").QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Excel Files;DBQ=" & Range("データベースファイルパス").Value & ";DefaultDir=" & Range("デフォルトフォルダ").Value & ""), Array(";DriverId=790;MaxBufferSize=2048;PageTimeout=5;")), Destination:= _
Worksheets("Temp").Range("A1"))
.CommandText = Array( _
"SELECT ", _
" プロジェクトデータ.`PSFT ID`,", _
" プロジェクトデータ.プロジェクト概要,", _
" プロジェクトデータ.`担当者名(日本語)`,", _
" プロジェクトデータ.PIC,", _
" 会社マスタ.略称,", _
" 会社マスタ.`会社名(日本語名)`, ", _
" プロジェクトデータ.`アルファベットプロジェクト名` ", _
"FROM `" & Range("データベースファイルパス").Value & "`.`プロジェクトデータ$` プロジェクトデータ, ", _
" `" & Range("データベースファイルパス").Value & "`.`会社マスタ$` 会社マスタ ", _
"WHERE プロジェクトデータ.会社ID = 会社マスタ.会社ID AND ", _
"((会社マスタ.略称 like '%" & UserForm1.TextBox1.Value & "%') OR (会社マスタ.`会社名(フリガナ)` like '%" & UserForm1.TextBox1.Value & "%')", _
" OR (会社マスタ.`会社名(日本語名)` like '%" & UserForm1.TextBox1.Value & "%') ", _
" OR (会社マスタ.`会社名(英語)` like '%" & UserForm1.TextBox1.Value & "%') ", _
" OR (プロジェクトデータ.`PIC` like '%" & UserForm1.TextBox1.Value & "%') ", _
" OR (プロジェクトデータ.`プロジェクト概要` like '%" & UserForm1.TextBox1.Value & "%') ", _
" OR (プロジェクトデータ.`アルファベットプロジェクト名` like '%" & UserForm1.TextBox1.Value & "%') ", _
" ) ", _
" AND プロジェクトデータ.登録ステータス not in ('廃止','登録申請') ")
.Name = "Excel Files からのクエリ"


続きはこちらです。見づらくて本当すみません。
http://okwave.jp/qa/q6559798.html

A 回答 (3件)

No1です。


おそくなりましたが、
"SELECT " & _
"プロジェクトデータ.`PSFT ID`, " & _
"プロジェクトデータ.プロジェクト概要, " & _
"プロジェクトデータ.`担当者名(日本語)`, " & _
"プロジェクトデータ.PIC, " & _
"会社マスタ.略称, " & _
"会社マスタ.`会社名(日本語名)`, " & _
"プロジェクトデータ.`アルファベットプロジェクト名`" & _
"FROM `" & Range("データベースファイルパス").Value & "`.`プロジェクトデータ$`.プロジェクトデータ " & _
"INNER JOIN `" & Range("データベースファイルパス").Value & "`.`会社マスタ$`.会社マスタ " & _
"ON プロジェクトデータ.会社ID = 会社マスタ.会社ID" & _
"WHERE ( " & _
" ((会社マスタ.略称) Like '%" & UserForm1.TextBox1.Value & "%') OR " & _
" ((会社マスタ.`会社名(日本語名)`) Like '%" & UserForm1.TextBox1.Value & "%') OR " & _
" ((会社マスタ.`会社名(フリガナ)`) Like '%" & UserForm1.TextBox1.Value & "%') OR " & _
" ((会社マスタ.`会社名(英語)`) Like '%" & UserForm1.TextBox1.Value & "%') OR " & _
" ((プロジェクトデータ.PIC) Like '%" & UserForm1.TextBox1.Value & "%') OR " & _
" ((プロジェクトデータ.プロジェクト概要) Like '%" & UserForm1.TextBox1.Value & "%') OR " & _
" ((プロジェクトデータ.`アルファベットプロジェクト名`) Like '%" & UserForm1.TextBox1.Value & "%')" & _
") AND ((プロジェクトデータ.登録ステータス) In ("廃止","登録申請"));"
ではどうでしょうか?
すべて同じ環境を作成する手間まではちょっとないため、ACCESSでSQL文を生成し、加工しました。

解決してたらごめんなさい。
    • good
    • 0

SQLは長いので見る時間はありませんが、


生成したSQLをDEBUG.PRINTで表示させ、
構文は正しいのか、"や'など不正はないか、NULL値でおかしいところはないか。
ODBC接続は問題ないか。

select・・・from・・・・
ができたら
select・・・from・・・・where・・・
だし
select・・・from・・・・where・・・
の各値を変数化していくし、で、
どこまで確認とれて、いざ実施していますか?。

いきなりこれだけ長いSQL文を書いて
1回目にて問題なくできるかどうかも怪しいのですが・・・。
いきなりこれだけ長いSQL文を書いて失敗しているのなら
やり方も工夫した方が良いと思います。
    • good
    • 0

『.CommandText = Array( _


"SELECT ", _』
でSQL文を分解して引数でセットしていますが・・・
.CommandTextはSQL文なので配列では動作しないと思いますよ。
下記ではどうでしょう?
.CommandText = "SELECT " & _
" プロジェクトデータ.`PSFT ID`," & _
" プロジェクトデータ.プロジェクト概要," & _
" プロジェクトデータ.`担当者名(日本語)`," & _
" プロジェクトデータ.PIC," & _
" 会社マスタ.略称," & _
" 会社マスタ.`会社名(日本語名)`, " & _
" プロジェクトデータ.`アルファベットプロジェクト名` " & _
"FROM `" & Range("データベースファイルパス").Value & "`.`プロジェクトデータ$` プロジェクトデータ, " & _
" `" & Range("データベースファイルパス").Value & "`.`会社マスタ$` 会社マスタ " & _
"WHERE プロジェクトデータ.会社ID = 会社マスタ.会社ID AND " & _
"((会社マスタ.略称 like '%" & UserForm1.TextBox1.Value & "%') OR (会社マスタ.`会社名(フリガナ)` like '%" & UserForm1.TextBox1.Value & "%')" & _
" OR (会社マスタ.`会社名(日本語名)` like '%" & UserForm1.TextBox1.Value & "%') " & _
" OR (会社マスタ.`会社名(英語)` like '%" & UserForm1.TextBox1.Value & "%') " & _
" OR (プロジェクトデータ.`PIC` like '%" & UserForm1.TextBox1.Value & "%') " & _
" OR (プロジェクトデータ.`プロジェクト概要` like '%" & UserForm1.TextBox1.Value & "%') " & _
" OR (プロジェクトデータ.`アルファベットプロジェクト名` like '%" & UserForm1.TextBox1.Value & "%') " & _
" ) " & _
" AND プロジェクトデータ.登録ステータス not in ('廃止','登録申請') "

はずしてたらすみません。
(SQL文の内容は確認してませんがプロジェクトデータと会社マスタのFROM句ってこれでよかったでしたっけ?)
    • good
    • 0
この回答へのお礼

素早い回答ありがとうございます。
コピペして使用してみましたが、同じエラーが出ました。。。
お手数おかけしますが、引き続き宜しくお願い致します。

お礼日時:2011/03/01 18:39

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

このQ&Aを見た人はこんなQ&Aも見ています