Dim rs As ADODB.Recordset
rs.Open "SELECT * FROM TableName"
... wird zur Laufzeit mit Fehler # 91 sprengen - „Objekt oder mit Block Variable nicht gesetzt ". Der wichtige Teil dieser Nachricht ist hier "nicht gesetzt".
Wenn Sie das tun:
Dim rs As New ADODB.Recordset
Sie wirklich tun:
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Das Set
Schlüsselwort verwendet wird, eine Referenz zuweisen einer Objektvariablen.
Insbesondere über ADODB.Recordset
, würde ich sagen Sie nicht in der Regel ein Cord-New
wollen. Stattdessen erhalten Sie eins durch Ausführen eines parametrisierten ADODB.Command
(z. B. wenn ein Befehl eine SELECT
Anweisung ausführt, erhalten Sie ein Recordset
Ergebnis).
Ich würde davon abraten, die As New
Verknüpfung im Anwendungsbereich der Prozedur zu verwenden. Vor allem, weil dies:
Private Sub Test()
Dim c As New Collection
c.Add "Test"
Set c = Nothing
Debug.Print c.Count 'what happens here?
End Sub
Wenn Sie den obigen Code ausdenken bläst, weil c
nicht „gesetzt“ mehr ist, wenn c.Count
zugegriffen wird, hast du gebissen.
Dieser Code verhält sich wie erwartet:
Private Sub Test()
Dim c As Collection
Set c = New Collection
c.Add "Test"
Set c = Nothing
Debug.Print c.Count 'what happens here? that's right, boom!
End Sub
Mögliche Duplikat [? Was ist das Schlüsselwort 'Neu' in VBA tun] (http://stackoverflow.com/questions/21652671/what-does-the -keyword-new-do-in-vba) –
@ Mat'sMug Diese Frage betrifft Microsoft Access und Recordsets, die sich von http://stackoverflow.com/questions/21652671/what-does-the-keyword- unterscheidet. new-do-in-vba –
Ich habe eine Notiz hinzugefügt, die spezifisch für 'ADODB.Recordset' ist. –