Para evitar el error cada fila de la hoja del archivo de excel que consultas debe tener un identificador único (id) por ejemplo
A B C
1 1 Dato1
2 2 Dato2
3 3 Dato3
4 4 Dato4
5 5 Dato5
En la columna A están los id's y no se deben de repetir porque son únicos, y en la columna B están los datos, de esta forma cuando hagas el update, el recordset podrá identificar la fila que debe actualizar. La forma en que abres el recordset esta bien.
Cuando abres el recordset este se posiciona en la primera fila, así que si . Fields(0) te arrojará el valor de la columna 1 de la fila 1 (fijate que es base cero), y . Fields(1) te arrojará el valor de la columna 2 de la fila 1; para ir a la siguiente fila es con . MoveNext, después cuando pongas . Fields(0) te devolverá la columna 1 de la fila 2, y . Fields(1) de devolverá la columna 2 de la fila 2; si quieres regresar a la primera fila lo puedes hacer con . MoveFirst el cual sin importar en que fila estés te pasa directamente a la primera fila y cuando hagas . Fields(0) te arrojara el valor de la columna 1 de la fila 1; también puedes regresar a la primera fila con . MovePrevious que es para ir a la fila anterior, es decir si estamos en la fila 2 la anterior es la fila 1, y de igual forma cuando hagas . Fields(0) te arrojará el valor de la columna 1 de la fila 1; para ir a la ultima fila se usa . MoveLast que sin importar en que fila estés te pasa directamente a la ultima fila. Para ir a una fila determinada puedes usar . Move n donde n es el numero de filas que deseas avanzar, pero antes debes posicionarte en la primera fila con . MoveFirst y después avanzar las filas que quieras, por ejemplo si quieres moverte a la fila 5 primero haces . MoveFirst y después . Move 4.
Por ultimo el recordset tiene una propiedad . BOF y otra . EOF, el primero indica que ya has pasado de la primera fila si es así su valor es True y si no su valor es False, es decir si estas en la primera fila y haces un . MovePrevious entonces . BOF sera True porque ya te pasaste de la primera fila es decir estas en una posición anterior a la fila 1 y si haces . Fields(0) te arrojara error porque ya no estas en una fila si no que estas antes de la primera fila. La segunda propiedad es similar pero indica si ya te pasaste de la ultima fila, si estas en la ultima fila y haces . MoveNext entonces . EOF sera True porque ya estas en una posición superior a la ultima fila y si haces . Fields(0) te arrojará error porque ya no estas en una fila si no que estas después de la ultima fila.
La propiedad . RecordCount te devuelve el numero de filas siempre y cuando pongas esta instrucción antes de abrir el recordset .CursorLocation=adUseClient
Para recorrer todas las filas puedes hacer
i=0
Do While Not .EOF
.Fields(1)=Datos(i)
.MoveNext
i=i+1
Loop
.Update
Nota que estoy considerando que el numero de filas del recordset es igual al numero de filas del array Datos, si no es así marcara un error; y solo actualizo el valor de la segunda columna del recordset (la de datos). El código dice Mientras no se haya pasado de la ultima fila del recordset cambiar el dato (segunda columna) de fila actual y después ir a la fila siguiente y repetir el ciclo, cuando se haya pasado de la ultima fila terminar el ciclo y actualizar.