Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9554 / 13644 ツリー ←次へ | 前へ→

【26685】エクセルからアクセスのクエリー実行について sawa 05/7/14(木) 9:34 質問[未読]
【26694】Re:エクセルからアクセスのクエリー実行... 小僧 05/7/14(木) 11:23 発言[未読]
【26703】Re:エクセルからアクセスのクエリー実行... sawa 05/7/14(木) 13:32 質問[未読]
【26705】Re:エクセルからアクセスのクエリー実行... 小僧 05/7/14(木) 14:29 発言[未読]
【26707】Re:エクセルからアクセスのクエリー実行... sawa 05/7/14(木) 15:10 質問[未読]
【26708】Re:エクセルからアクセスのクエリー実行... 小僧 05/7/14(木) 15:35 発言[未読]
【26714】Re:エクセルからアクセスのクエリー実行... sawa 05/7/14(木) 16:51 発言[未読]

【26685】エクセルからアクセスのクエリー実行につ...
質問  sawa  - 05/7/14(木) 9:34 -

引用なし
パスワード
   エクセルからアクセスのクエリーを実行したいのですが、他の掲示板で質問したところ、下記の回答をいただきました。
ただ、クエリーは選択できるのですが、実行するとエラーが出るのです。
どこでエラーが出てるのかさっぱりわかりません(>_<)
どなたか分かる方がいらっしゃったら、ご指導お願いしたいのですが。。。

↓これをシートモジュールへ

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancl As Boolean)
  Dim Lp As Single, Wp As Single, Hp As Single
  Dim ObjDB As DAO.Database
  Dim i As Long
  Const MyDB As String = _
  "C:\Documents and Settings\User\My Documents\DB_Files\test.mdb"

  With Target
    If .Row > 1 Then Exit Sub
    Lp = .Left: Wp = .Width * 2: Hp = .Height
  End With
  Cancel = True
  Set ObjDB = DBEngine.Workspaces(0).OpenDatabase(MyDB)
  If ObjDB.QueryDefs.Count = 0 Then GoTo ELine
  With ActiveSheet.DropDowns.Add(Lp, 0.1, Wp, Hp)
   For i = 0 To ObjDB.QueryDefs.Count - 1
    .AddItem ObjDB.QueryDefs(i).Name
   Next i
   .OnAction = "Exc_MySQL"
  End With
ELine:
  ObjDB.Close: Set ObjDB = Nothing
End Sub

↓これは標準モジュールへ

Sub Exc_MySQL()
  Dim x As Variant
  Dim ObjDB As DAO.Database
  Dim i As Integer
  Dim SQLSt As String
  Const MyDB As String = _
  "C:\Documents and Settings\User\My Documents\DB_Files\test.mdb"

  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  With ActiveSheet.DropDowns(x)
   i = .ListIndex - 1
   .Delete
  End With
  Set ObjDB = DBEngine.Workspaces(0).OpenDatabase(MyDB)
  SQLSt = ObjDB.QueryDefs(i).SQL     
  ObjDB.Execute SQLSt, dbFailOnError
  ObjDB.Close: Set ObjDB = Nothing
End Sub 

まず、VBE画面のメニューで「ツール」「参照設定」を選択し、
"Microsoft DAO 3.? Object Library" にチェックをつけて下さい。
イベントマクロを入れたシートの1行目の任意のセルをダブルクリックすると、
コンボボックスが現れます。そこに
"C:\Documents and Settings\User\My Documents\DB_Files\test.mdb"(仮)
で登録しているクエリーの名前がリストアップされますから、選択してください。
Exc_MySQLが呼び出されて実行されます

【26694】Re:エクセルからアクセスのクエリー実行...
発言  小僧  - 05/7/14(木) 11:23 -

引用なし
パスワード
   ▼sawa さん:
こんにちは。

>Cancl As Boolean)

→Cancel As Boolean 転記ミス?

>他の掲示板で質問したところ、下記の回答をいただきました。

そのやりとりが当方には解りませんので的確な回答が付けられませんが、

>どこでエラーが出てるのかさっぱりわかりません(>_<)

こちらについては「ステップイン」で実行すると
エラーの発生する行を特定できると思います。


こちらの環境では問題なくクエリが実行できますが、
根本的な問題として…アクションクエリを実行させてますよね?

【26703】Re:エクセルからアクセスのクエリー実行...
質問  sawa  - 05/7/14(木) 13:32 -

引用なし
パスワード
   ▼小僧 さん:
早速にありがとうございます。

>>Cancl As Boolean)
>→Cancel As Boolean 転記ミス?

元々eが無かったのですが、多分抜けてるのでしょうね。。
ありがとうございます。

>こちらについては「ステップイン」で実行すると
>エラーの発生する行を特定できると思います。

ObjDB.Execute SQLSt, dbFailOnError
で止まるのです。
SQLStは選択したクエリーがセットされてるようですが、dbFailOnError=128
になってるようです。。

>こちらの環境では問題なくクエリが実行できますが、
>根本的な問題として…アクションクエリを実行させてますよね?

すいません。独学でやってますのであまり詳しくないのですが、、、(;^。^A
アクションクエリとはどういうものを指すのですか?
あまりに初歩的な事ですみません(>_<)

【26705】Re:エクセルからアクセスのクエリー実行...
発言  小僧  - 05/7/14(木) 14:29 -

引用なし
パスワード
   ▼sawa さん:
こんにちは。

>アクションクエリとはどういうものを指すのですか?

値の更新    (Update句)
レコードの追加 (Insert句)
レコードの削除 (Delete句)

等、実行するとテーブルに対して影響を与えるクエリを
アクションクエリと呼びます。

それに対して、選択クエリ(Select句のもの)においては
テーブルから値を「抽出」しただけでその後「どうする」という動作が
別に必要になってきます。

もし sawa さんが選択クエリを実行したいのであれば、
その結果をどうしたいか(Excelのセルに貼り付けたい、
Accessのデータシートビューで表示させたい等)をご提示すれば
的確な回答がつきやすくなると思われます。

【26707】Re:エクセルからアクセスのクエリー実行...
質問  sawa  - 05/7/14(木) 15:10 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。丁寧な回答ありがとうございます。

>実行するとテーブルに対して影響を与えるクエリを
>アクションクエリと呼びます。

既存の業務システムのデーターベース(SQLサーバーらしい)があり、そのデーターを
エクセルに出力する為のアクセスのプログラム(xxxxxexcel.mdb)に多数あるクエリー
の一つを実行させたいのです。
これは、アクションクエリですよね??
現在は、都度アクセスを起動してプログラムからクエリーを実行していますが、
エクセルのマクロのボタンを押すとクエリーが実行できるようにしたいのです。
つたない説明で申し訳ございません(>_<")

【26708】Re:エクセルからアクセスのクエリー実行...
発言  小僧  - 05/7/14(木) 15:35 -

引用なし
パスワード
   ▼sawa さん:
こんにちは。

>これは、アクションクエリですよね??

Accessを開いてクエリを選択 → SQL ビュー で表示されるものが
「Insert」で始まっていればアクションクエリですが…。

>そのデーターをエクセルに出力する為のアクセスのプログラム
>(xxxxxexcel.mdb)に多数あるクエリーの一つを実行させたいのです。

通常はAccess のテーブルの中身をExcel にエクスポートする場合には
クエリは使わないと思われます。

可能か、不可能かであれば可能なのかもしれませんが、
(In句に外部DBでExcelを指定してあげればできるのかな…)
普通は VBA で処理するものだと思います。

詳細が良く解らないので何とも言えませんが
Accessの特定のテーブルの結果をExcelに表示させたいのであれば
素直にAccessに対してSQLを発行して
結果をExcelに貼り付ける方が楽な気がするのですが…。

【26714】Re:エクセルからアクセスのクエリー実行...
発言  sawa  - 05/7/14(木) 16:51 -

引用なし
パスワード
   ▼小僧 さん:
何度もすみません。

>通常はAccess のテーブルの中身をExcel にエクスポートする場合には
>クエリは使わないと思われます。

既存の業務システムのデーターベースをアクセスでエクセルに出力してるので、
通常のアクセスとは使い方が異なるのかも。。。
例えば、取引先の振込先一覧を作るならば、取引先マスタと振込銀行マスタを取引先コードで結合させているクエリーを実行すると、勝手にエクセルになるのです(^_^;
説明が下手ですみません。。。。

もしかしたら、アクションクエリではなく、選択クエリなのかもしれませんね。
今さらすみません。。。。

9554 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free