Recorrer una tabla con VBA y actualizar un campo

Estoy intentando actualizar un campo numérico de una tabla cuyo valor es cero y poner otro numero (p.e=44). El Código que he utilizado es:

Public Function recorrerTabla() As Long
Dim db As Database
Set db = CurrentDb
Set rst = db.OpenRecordset("fraFE", dbOpenTable)
rst.MoveFirst
Do While Not rst.EOF
rst.Edit
If fraFE!nfra = 0 Then
fraFE!nfra = 44
rst.update
End If

rs.MoveNext
Loop
End Function

Y el error que me da es "Se ha producido el error '424' en tiempo de ejecución: Se requiere un objeto"

Respuesta
2

Te falta por declarar el objeto rst, con:

Dim rst as Recordset

Debajo de la declaración del objeto db.

Prueba y me dices.

Otra opción, sin usar recordsets sería usando una SQL de actualización, por ejemplo:

Public Function Actualiza(nuevoValor as Integer)

Dim miSQL as String

miSQL="Update fraFE SET nfra=" & nuevoValor & " WHERE nfra=0"

CurrentDb.Execute miSQL

End Sub

Y la llamarías así, si quieres que actualice los 0 a 44:

Actualiza(44)

Sveinbjorn El Rojo he probado las dos formas y me funciona la segunda.  Y si ahora quisiera cambiar el valor por un contador que fuese incrementándose en una unidad?

Yo he usado este codigo , el problema es que con miSQL actualiza todos los valores "0" de una sola vez y yo lo que quería es que recorriese la tabla añadiendo un valor que se fuese incrementando.

Public Function recorrerTabla() As Long
Dim db As Database
Dim miSQL As String
Dim var1 As Integer
[var1] = 1
Set db = CurrentDb
miSQL = "Update fraFE SET nFra=" & [var1] & " WHERE nfra=0"
[var1] = [var1] + 1
MsgBox [var1] ' lo he puesto para ver si funcionaba el contador y la unica vez que pasa por aquí si que incrementa el valor a 2
CurrentDb.Execute miSQL
End Function

Gracias por tu ayuda

Para lo que quieres es mejor usar recordsets.

¿Qué error te da y donde en la primera opción?

Prueba este otro código, a ver si te funciona (comprueba bien los nombres de los campos y las tablas):

Public Sub recorrerTabla() 
Dim rst As DAO.Recordset
Dim contador as Integer
contador=1 ' Aquí pondrías el número por el que quieres que empiece
'O si quieres que empiece por el último, pondrías esto otro,
'suponiendo que el campo en que lo almacenas en nfra:
'contador=Nz(DMax("nfra","fraFE"),1)
Set rst = CurrentDb.OpenRecordset("SELECT * FROM fraFE WHERE nfra=0") 'Creas el recordset sobre los registros que vas a actualizar únicamente, es decir, los que tienen nfra=0
If rst.Recordcount=0 Then Exit Sub  'Si no hay registros que cumplan la condición sales sin más
rst.MoveFirst
Do Until rst.EOF
     rst.Edit
     rst("nfra") = contador
     rst.Update
     rst.MoveNext
     contador=contador+1
Loop
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas