私はVBAの専門家ではなく、マクロに優れていますが、データベースに存在するSQLマクロを実行する必要があります。SQL定義内のこのマクロは、いくつかの'echo'操作(最初に4'echo'、最後に2'echo')を実行し、SQLマクロは18列を取得します。'echo'を削除すると検索は良好に実行されますが、このマクロはシステムによって自動的に作成されるため、SQLコードで'echo'を維持する必要があります。外部ソースからデータを取得するために、次のようにADOレコードセットを使用しました。
'If the recordset is empty
If (rs.EOF And rs.BOF) Then
iReply = MsgBox(Prompt:="No data retrieved", _
Buttons:=vbOKOnly, Title:="Error")
Else 'If the recordset contains data
rs.MoveFirst
Row = 2
Do While (rs.EOF = False And rs.BOF = False)
p = rs.GetRows
Sheet2.Range("A" & Row).Value = p(0, 0)
Sheet2.Range("B" & Row).Value = p(1, 0)
Sheet2.Range("C" & Row).Value = p(2, 0)
Sheet2.Range("D" & Row).Value = p(3, 0)
Sheet2.Range("E" & Row).Value = p(4, 0)
Sheet2.Range("F" & Row).Value = p(5, 0)
Sheet2.Range("G" & Row).Value = p(6, 0)
Sheet2.Range("H" & Row).Value = p(7, 0)
Sheet2.Range("I" & Row).Value = p(8, 0)
Sheet2.Range("J" & Row).Value = p(9, 0)
Sheet2.Range("K" & Row).Value = p(10, 0)
Sheet2.Range("L" & Row).Value = p(11, 0)
Sheet2.Range("M" & Row).Value = p(12, 0)
Sheet2.Range("N" & Row).Value = p(13, 0)
Sheet2.Range("O" & Row).Value = p(14, 0)
Sheet2.Range("P" & Row).Value = p(15, 0)
Sheet2.Range("Q" & Row).Value = p(16, 0)
Sheet2.Range("R" & Row).Value = p(17, 0)
Row = Row + 1
Loop
End If
実際のところ、SQLマクロの「echo」では、最初の「echo」のみが取得され、最初の列のExcelシートに出力されます。その後、他の「echo」も、他の「echo」も取得されません。私の興味深い18列のデータ。レコードセットのMoveNextメソッドとMoveメソッドを5番目の位置に移動しようとしましたが(最初に4'echo'があるため、5番目の位置は最初の18列のデータに対応すると思います)、機能しませんでした:( 2番目の位置に移動しても機能しないため、レコードセットには最初の「エコー」に対応するエントリが1つしかないため、レコードセットはそのEOFに到達し、ループを終了します。 SQLマクロによって生成された「エコー」の取得を回避する私のコード?
前もって感謝します