いつもお世話になっております。
下記のコードは一度
教えて頂いたコードを
一部変更しました。
変更箇所は
NS = NS & " [顧客マスタ$] T LEFT JOIN [取引先$] S"
NS = NS & " ON T.取引先 = S.取引先$"
テーブルを結合しました。
実行すると指定された種別がSQLステートメントの
FROM句にある複数のテーブルを参照しました。
と表示されてしまいます。
わかる方おしえてくれませんでしょうか
よろしくお願いいたします。
Dim objCn As New ADODB.Connection
Dim objRS As ADODB.Recordset
Dim NS As String
Dim a() As String
Dim d As Long
Dim cnt As Long
With Me.ListBox3
For d = 0 To .ListCount - 1
If .Selected(d) Then
cnt = cnt + 1
ReDim Preserve a(1 To cnt)
a(cnt) = .List(d)
End If
Next
If cnt = 0 Then Exit Sub
End With
With objCn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0"
.Open ThisWorkbook.Path & "\" & ThisWorkbook.Name
End With
Cells.Clear
NS = " "
NS = NS & " SELECT"
NS = NS & " S.種別,T.年齢"
NS = NS & " FROM"
NS = NS & " [顧客マスタ$] T LEFT JOIN [取引先$] S"
NS = NS & " ON T.取引先 = S.取引先$"
NS = NS & " WHERE"
NS = NS & " 種別 IN ('" & Join(a, "' , '") & "')"
NS = NS & " AND"
NS = NS & " 日付2"
NS = NS & " BETWEEN #" & ListBox1.List(ListBox1.ListIndex) & "#"
NS = NS & " AND #" & ListBox2.List(ListBox2.ListIndex) & "#"
Set objRS = New ADODB.Recordset
Set objRS = objCn.Execute(NS)
With Worksheets("Sheet2")
.Range("A2:b10").ClearContents
.Range("A2").CopyFromRecordset objRS
For i = 0 To objRS.Fields.Count - 1
.Cells(1, i + 1).Value = objRS.Fields(i).Name
Next
End With
No.2
- 回答日時:
> テーブル名をそえてもだめです。
エラー内容は同じですか?
元が
S.種別,T.年齢
[顧客マスタ$] T LEFT JOIN [取引先$] S
なのに
顧客マスタ.種別,取引先.年
[顧客マスタ$] LEFT JOIN [取引先$]
になってます。
S→顧客マスタ T→取引先 と変換してますけど、どっちが意図したものなのですか?
今、てもとにExcelが無いので確認できませんが
顧客マスタ.種別
ではなく
[顧客マスタ$].種別
だったりしませんか?
あるいは、元々は S T と別名付けているのだから、そのまま S.種別 とかでいいのでは?
No.3ベストアンサー
- 回答日時:
ちょっと書きなおします
「指定された種別がSQLステートメントのFROM句にある複数のテーブルを参照しました。」
とでるのは。
T ([顧客マスタ$]の別名) と S ([取引先$] の別名) の両方のテーブルの「種別」って列があって、
「種別 IN (〜」の「種別」が、 「S.種別」なのか 「T.種別」なのか 判断できなくなっているのでは?
それならば、解決策は、 「S.種別」なのか 「T.種別」なのかを明示することです。
※ 別名を付けているので「本来のテーブル名」は使えません。
どちらを指定するのが正しいかは、あなたしか知りません。
「選択したものを[取引先$]から探す」
「選択したものを[顧客マスタ$]から探す」
どちらのケースもありえるからです。
-----------------
> テーブル名をそえてもだめです。
補足のSQLでは、上記のS,Tが無くなっていています。
この場合、テーブル名での指定になります。
Excelのではどうか知りませんが、通常のSQLでは
FROM [顧客マスタ$]
と指定したのなら、その列は
[顧客マスタ$].種別
等と、FROMに記述された名前がそのまま使われます。
ところが、補足のプログラムでは
顧客マスタ.種別
と「FROMで指定されていない名前」が使われています。
「テーブル名をそえてもだめ」なのは、「FROMで指定されていない名前」を使っているからではないだろうか?
それならば「存在しない項目を使っています」的なエラーメッセージになっているのでは?
そこを確認するために
「エラー内容は同じですか?」
とお尋ねした次第です。
実際、どうなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- ドメイン・サーバー・クラウドサービス 独自ドメインでのNSレコード設定 1 2023/07/12 18:36
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WORD VBA プログラム修正をお願...
-
AccessからExcelへエクスポート...
-
ExcelVBAについて
-
VBとアクセスでSQL文に変...
-
VB.NET データセットとADOレコ...
-
『列名 '担当者CD' があいま...
-
ACCESS クエリで 昇(または降...
-
VBでコンボボックスとテキスト...
-
CSVファイルのエクスポートでソ...
-
html javascriptにてWeb SQLを...
-
DataGridViewに複数テーブルの...
-
VBAで OLEオブジェクト型のフ...
-
ExcelVBAからAccessMDB内のテー...
-
MDBテーブルへの追加変更を教え...
-
他のMDBのテーブルに追加したい
-
C# OleDbDataAdapter.Fillメソ...
-
.net 複数の主キーを設定する方法
-
Accessで宛名ラベルに同一宛先...
-
ADO&mdbで、リンクテーブルの...
-
ASP.NET GridView 一致した行の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WORD VBA プログラム修正をお願...
-
VBとアクセスでSQL文に変...
-
Accessで別mdbのテーブルをコピー
-
『列名 '担当者CD' があいま...
-
ExcelVBAからAccessMDB内のテー...
-
他のMDBのテーブルに追加したい
-
手動または分散トランザクショ...
-
SQLを発行とは?クエリの作成と...
-
DataGridViewに複数テーブルの...
-
CSVファイルのエクスポートでソ...
-
AccessからExcelへエクスポート...
-
エクセルのテーブルを解除する...
-
Excel複数シートをaccessへ一括...
-
HTMLのテーブルの行数が多くな...
-
COBOLのINVALID KEYが理解でき...
-
アクセステーブル、リンクとロ...
-
ACCESSのテーブル名をリストに...
-
ACCESS2010 実行時エラー 2766
-
DataGridの中身をDataSetにテー...
-
【ADO】「Execute」を使うと...
おすすめ情報
テーブル名をそえてもだめです。
NS = NS & " SELECT"
NS = NS & " 顧客マスタ.種別,取引先.年齢"
NS = NS & " FROM"
NS = NS & " [顧客マスタ$] LEFT JOIN [取引先$] "
NS = NS & " ON 顧客マスタ.取引先コード = 取引先.取引先コード"
NS = NS & " WHERE"
NS = NS & " 顧客マスタ.種別 IN ('" & Join(a, "' , '") & "')"
NS = NS & " AND"
NS = NS & " 顧客マスタ.日付2"
NS = NS & " BETWEEN #" & ListBox1.List(ListBox1.ListIndex) & "#"
" s.種別 IN ('" & Join(a, "' , '") & "')"と言うことでしょうか