Ich führe SQL-Abfrage in Excel durch Excel-VBA & ADO. Ich parse das Ergebnis mit looping Dann finde ich, dass ich wissen muss, wie viele Datensätze sql wird vor dem Parsen des Ergebnisses.Wie legen Sie den Analyseergebnisbereich fest, ohne die Anzahl der Datensätze zu kennen?
In Wirklichkeit kenne ich nicht die Anzahl der Abfrage Ergebnis Datensätze vor dem Erstellen der Abfrage.
Irgendwelche Funktionen oder Methoden können mich wissen lassen, damit ich die Schleifenaussage anziehen kann?
(i haben Einsicht von .fields() .Properties(), aber nicht funktionieren)
Sub sbADO()
Dim sSQLQry As String
Dim ReturnArray
Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset
Dim DBPath As String, sconnect As String
DBPath = ThisWorkbook.FullName
'You can provide the full path of your external file as shown below
'DBPath ="C:\InputData.xlsx"
sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"
Conn.Open sconnect
sSQLSting = select ....' it is too long so i choose to skip
Set rs = Conn.Execute(sSQLSting)
Do While Not rs.EOF
'Officer = rs.Fields(i).Value
For j = 5 To 29 ' THIS IS THE MAIN CODE I NEED TO IMPROVE
'worksheet1.Cells(7, 11) = rs.Properties.Count
worksheet1.Cells(j, 1) = rs.Fields(0).Value
worksheet1.Cells(j, 3) = rs.Fields(2).Value
worksheet1.Cells(j, 4) = rs.Fields(3).Value
worksheet1.Cells(j, 7) = rs.Fields(6).Value
' Insert data to your worksheet here
rs.MoveNext
Next j
Loop
rs.Close
End Sub
For j = 5 To 29 '
next j
Dies ist der Bereich I gesetzt sollte, dass der Bereich der Arbeitsblatt-Parsing beeinflussen .There ist insgesamt 24 Nummern von Abfrage Datensatz Ergebnis in diesem Fall. Wenn ich j zu groß einstellen (z. B. zu 30), wird es 3021 Fehler-BOF & EOF sollte wahr werden. Daher sollte der Bereich die Nummern von Datensatz passen Gut .
Sie müssen nur "j" innerhalb Ihrer Schleife "Do While Not rs.EOF" inkrementieren. Sie brauchen die 'For j ...' Schleife überhaupt nicht. –
MS Excel Range unterstützt die 'CopyFromRecordset' Methode, was sehr praktisch ist. –
@ Maciej Los kann ich 'CopyFromRecordset' nicht verwenden. Einige Spalten Ich muss Daten in Excel zu bewerten. Die SQL wird alle meine gespeicherten Daten zurückgesetzt – Vito