私は独学のExcel VBAとSQLユーザーです。私は複雑さを加える前にいくつかの簡単なクエリをテストしています。私はここで驚くほど明白な何かを見逃しているに違いありません。EXCEL SQL SELECTはThisWorkBook内のフィールド名を認識しません
私は、アクティブワークブック(ThisWorkBook)のテーブルでSQL SELECT文を実行するためにADO接続を使用しています。 Excelテーブルの名前は "tbl_QDB"で、ワークシート "MyQDB"にあります。テーブルはセルA1で始まります。したがって、テーブルHeaderRowRangeの上に空白またはポピュレートされたセルはありません。
ThisWorkBookへのADO接続をセットアップしましたが、これは問題なく動作しています。私はこの最も単純な基本的なSELECTクエリを実行することができます
Sub ConnectionOpen2()
'### UNDER DEVELOPMENT
Dim sconnect As String
Const adUseClient = 3
Const adUseServer = 2
Const adLockOptimistic = 3
Const adOpenKeyset = 1
Const adOpenDynamic = 2
'used to connect to this workbook for SQL runs
On Error GoTo err_OpenConnection2
Set cn2 = CreateObject("ADODB.Connection")
Set rec2 = CreateObject("ADODB.Recordset")
rec2.CursorLocation = adUseClient
rec2.CursorType = adOpenStatic
rec2.LockType = adLockOptimistic
datasource = ThisWorkbook.FullName
sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & datasource & ";" & _
"Extended Properties=""Excel 12.0;HDR=YES;ReadOnly=False;Imex=0"";"
cn2.Open sconnect
'etc, etc...
End Sub
:ここでは、コードです
SQLSTR="SELECT * FROM [MYQDB$]"
rec2.open SQLSTR, cn2
これは動作し、10個のレコードを生成し、すなわちrec2.recordcount = 10。
私はこれをしようとした場合ただし、エラー:
SQLSTR="SELECT QID_1 FROM [MYQDB$]"
QID_1は、ワークシート "MyQDB" の表に有効なフィールドです。 QID_1を()または[]または「 」で囲んでもエラーは変わりません。フィールド名をメイクアップしたフィールドで置き換えることもできます。 DonaldDuckと私は同じエラーになります。
"*"を使用しても、テーブル内のフィールド名を使用しないと、SELECT文はなぜ機能しますか?これはとても基本的なように思えるので、シンプルだが重要な点を見逃しているに違いない。
誰かが間違いを指摘できるかどうか本当に感謝します!
なぜ* Excel *内のExcelシートを*クエリ*しようとしていますか?シートを読み込んでセルを読み取るだけです。 –
'QID_1'はフィールド名ではありません。 Excelはフィールドを持たず、* cells *を持ちます。セルアドレスは、例えば、「$ A $ 1」である。エラー自体は、クエリにパラメータ指定子が含まれていても、パラメータ値は渡されなかったことを意味します。ほとんどのExcelは、パラメータの予期しない 'QID_1'値を混乱させました –
なぜ' QID_1'をフィールドと呼びますか? Excelには行と列があり、フィールドはありません。特定の範囲を*名前指定してSQLクエリのテーブルとして扱うことができます。名前付きセルはまだ1行1列の範囲です。テーブルはまだ名前付き範囲です。あなたの*クエリ*は特定のテーブルではなく、シート全体を対象としています。 –