An expression such as:
Code:
xlSht.Range("A:A").Value
Returns an array object, not a scalar value. Its actually composed of (remember that, by default, the lower bound of an array in Excel is 1, not 0):
Code:
Range("A:A").Item(1, 1).Value, Range("A:A").Item(2, 1).Value,... Range("A:A").Item(65536, 1).Value
From Access (more precisely from DAO) viewpoint, the Field object of a RecordSet is scalar, i.e. it can only contain a single value (with the infamous exception of the so-called multi-value fields in Acc2007 and 2010, but that's another story).
You must use a loop to perform this kind of operation. You can either:
Code:
Dim i As Long
For i = 1 to 65536
dbRst.AddNew
dbRst.Fields(0).Value = xlSht.Range("A" & i).Value
'
' Continue with the other columns.
'
db.Rst.Update
Next i
Or:
Code:
Dim i As Long
For i = 1 to 65536
dbRst.AddNew
dbRst.Fields(0).Value = xlSht.Range("A:A").Item(i, 1).Value
'
' Continue with the other columns.
'
db.Rst.Update
Next i