Tengo esta función que a continuación voy a poner. Pero paso primero a comentar esto que me ocurre porque es de lo más curioso ya que no soy capaz de ver el fallo. Tengo una aplicación que utiliza 6 tablas, en todas ellas los indices son enteros salvo una que es string. Pues bien, esta función busca correctamente el registro más alto en cinco de las tablas salvo una que de todas me dice que el registro vale 0.

Public Function MaximoReg(ByVal campo As String, ByVal mitabla As String) As Integer
Try
OpenDatos()
MaximoReg = 0
Dim SQL As String = "Select Max(" & campo & ") From " & mitabla
Dim cmd As New OleDb.OleDbCommand(SQL, cn)
MaximoReg = CInt(cmd.ExecuteScalar)
If CInt(MaximoReg) > 0 Then
Return CInt(MaximoReg + 1)
Else
Return CInt(1)
End If
Catch oExcep As Exception
Dim oTipo As Type
oTipo = oExcep.GetType
MessageBox.Show("Se ha producido un error tipo {0},otipo.name")
Finally
CloseDatos()
End Try
End Function

He mirado las relaciones y considero que están bien (1 a infinito), ya que de la tabla de salida solo hay un registro y de la de entrada puede haber varios.
Así que agradezco cualquier sugerencia ya que llevo perdidos tres días con la simpleza.

Un saludo y gracias.