あらゆる形式のコードに非常に新しい。 SQLを使用してAccessデータベースからデータをプルし、Excelスプレッドシートに書き込むスクリプトをVBAで実行しようとしています。コードは以下のようになります。クリーンに実行されますが、プルしているデータの使用方法がわかりません。前もって感謝します。
Sub Get_Data()
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL, strInput As String
strFile = "S:\Location.Database.accdb"
strCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFile
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon
strInput = InputBox("Input Desired Name")
strSQL = "SELECT NAME, Location WHERE NAME =""'strInput'"";"
cn.Execute strSQL
cn.Close
Set cn = Nothing
End Sub
レコードセットオブジェクトに入力する必要があります(これは、宣言したrs変数です)。以下のコードを変更して、それを実行します。その後、レコードセットからRANGE.copyfromrecordset <yourrecordset>
を含む範囲に結果を直接コピーできます。これは、結果をSHeet1.Range( "A1")にダンプする場所にも追加しました。あなたはおそらくそれを変更したいと思うでしょう。追加編集:ADODBの遅延バインディングを使用していることに気づきました。実際に機能するようにコードを調整しました。
Sub Get_Data()
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL, strInput As String
strFile = "S:\Location.Database.accdb"
strCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFile
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon
strInput = InputBox("Input Desired Name")
strSQL = "SELECT NAME, Location WHERE NAME =""'strInput'"";"
'Added the following four lines
Set rs = CreateObject("ADODB.RECORDSET")
rs.activeconnection = cn
rs.open strSQL
Sheet1.Range("A1").CopyFromRecordSet rs
'removed
'cn.Execute strSQL
rs.close
cn.Close
Set cn = Nothing
End Sub
RecordSet(この場合はrs)は、SQLの結果を保持する仮想テーブルと考えることができます。レコードごと(rs.MoveFirst、MoveNext、MoveLastを使用)およびフィールドごと(rs.fieldsコレクションを反復処理することによって)のRecordSetを操作するか、結果を範囲にダンプすることができます。