Ключевое слово New
создает экземпляр объекта , номер ADODB.Recordset
.
Объектная переменная должна иметь ссылку прежде, чем она может быть доступна, так что:
Dim rs As ADODB.Recordset
rs.Open "SELECT * FROM TableName"
... взорвется во время выполнения с ошибкой # 91 - «Объект или с блоком переменная не установлена ". Важная часть этого сообщения здесь «не установлена».
Когда вы делаете:
Dim rs As New ADODB.Recordset
Вы действительно делаете:
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Set
ключевое слово используется для присвоить ссылку к переменной объекта.
ADODB.Recordset
В частности о, я бы сказал, что вы не обычно хотят New
до набора записей. Вместо этого вы должны получить один запустив параметризованный ADODB.Command
(например, когда команда запускает оператор SELECT
, вы получите результат Recordset
).
Я бы посоветовал против использования As New
ярлыка в процедуре области. Главным образом из-за этого:
Private Sub Test()
Dim c As New Collection
c.Add "Test"
Set c = Nothing
Debug.Print c.Count 'what happens here?
End Sub
Если вы думаете, что приведенное выше код взрывается, потому что c
не «набор» больше, когда c.Count
доступа, вы укусили.
Этот код ведет себя, как и ожидалось:
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
Возможный дубликат [? Что ключевое слово 'New' сделать в VBA] (http://stackoverflow.com/questions/21652671/what-does-the -keyword-new-do-in-vba) –
@ Mat'sMug Этот вопрос относится только к Microsoft Access и Recordsets, который отличается от http://stackoverflow.com/questions/21652671/what-does-the-keyword- new-do-in-vba –
Я добавил примечание, относящееся к 'ADODB.Recordset'. –