I am an RTFM kinda guy. Now teach me to fish.
This is a little confusing because vb/vba is very sloppy. But here it goes
1) It is very sloppy because there is actually two seperate types of notation. Bang and Dot. I will talk Dot first
2) Before talking this you have to understand collections. A collection is an object that contains other objects. To refer to an object in a collection you use either the named index or that item or its numerical index
collectionName.item("namedIndex").value
collectionName.item(1).value
In this notation you can use a variable
x = "namedIndex"
then
collectionName.item(x).value
or
y = 1
then
collectionName.item

.value
example
numbered index: rs2.fields.item(1).value
named index: rs2.fields.item("namedIndex").value
variable: rs2.fields.item(x).value
3)Now this is what gets lost in the sloppiness. All objects have default properties and/or methods. VB lets you choose to write the default or omit it.
For most objects the default property is "value". So you can simply write:
numbered index: rs2.fields.item(1)
named index: rs2.fields.item("namedIndex")
variable: rs2.fields.item(x)
Now for a collection the default property is "item" and hardly anyone writes it.
So this is fine:
collectionName("namedIndex")
rs2.fields("NamedIndex)
But guess what the default property of a recordset is? Yep, the "Fields" collection. So that can get dropped
rs2("namedIndex")
rs2(1)
rs2(somevariable)
4)That is why the following is incorrect
collectionName.("namedIndex")
the dot does not seperate a collection from the index
5) Now for Bang. This only works with named indices of collections and does not allow for variables.
CollectionName!NamedIndex
rs2.Fields!YourFieldName
But as said, "Fields" is the default and does not need to get written
rs2!YourFieldName
This is a little confusing because in this case you drop the collection name, but still keep the !
Fish on.