Saludos, 
tengo que hacerle un favor a mi madre para su base de datos en access del trabajo. De momento es tan simple como acceder a una tabla, hacerle una consulta sql y hacer ciertos cálculos de fechas, etc.
No he trabajado nunca con Access ni con VB, así que ando un poco perdido. Hice un día una macro que te ponía lo que metías en el campo "e-correo" como un hipervínculo, pero ya ni recuerdo ni nada.
El caso es que estoy intenando acceder a la tabla para hacer la consulta y no me funcionan los componentes DAO. Lo he intentado con ADO, pero también me falla. Os cuento los fallos:
-  DAO:
 No me aparecen los componentes en autocompletar (no están), así que al ejecutar me sale error de "tipo no definido", por ejemplo para "Database", "Workspace", etc.
 
 
-  ADO:
 
 ...
 Dim resultado As New ADODB.Recordset
 Dim conexion As New ADODB.Connection
 
 conexion = New ADODB.Connection
 With conexion
 .Provider = "Microsoft.Jet.OLEDB.4.0"
 .ConnectionString = "origen de datos=" & CurrentDb.Name
 .Open
 End With
 ...
 
 Me da el error de "No se encuentra el archivo ISAM instalable"
 
Creo que debo instalar algo más? estoy con OfficeXP en WinXPpro.
Cualquier ayuda es bienvenida. Gracias.
 
Herramientas > Referencias > Microsoft DAO 3.6 Object Library
OK, lo del DAO ya está ;)
La de ActiveX es 2.1 la que está activada, es correcto?¿
Este DAO parece funcionar, continúo sobre ello si no me comentáis nada en favor de ADO.
    Dim resultado As Recordset
    Dim basedatos As Database
    
    Set basedatos = CurrentDb
    Set resultado = basedatos.OpenRecordset("SELECT * FROM TablaPrueba WHERE [DNI] = 1")
				 Utiliza ADO que es más moderno.
Prueba con:
Dim resultado As New ADODB.Recordset
resultado.Open "tabla", CurrentProject.Connection
			
			
				Cita de: NeLoUtiliza ADO que es más moderno.
Prueba con:
Dim resultado As New ADODB.Recordset
resultado.Open "tabla", CurrentProject.Connection
Con ADO me sigue saliendo el "No se pudo encontrar el archivo ISAM instalable", por eso he tirado con DAO de momento. 
			
 
			
			
				 Pues ese error no me suena.
Mira a ver si tienes todas las referencias puestas, porque parece ser algo de librerias.
Saludos. 
			
			
			
				 Sólo tengo 5 referencias (tuve que añadir la de ADO).
- Visual Basic For Applications
 
- MS Access 10.0 Object Library
 
- OLE Automation
 
- MS DAO 3.6 Object Library
 
- MS ADO 2.1 Library
 
Con DAO tengo un problema, a ver si alguien tiene un rato y me mira qué le pasa a este sencillo código.
El problema viene al añadir la funcion Controlar_Mensaje (eso creo), que lo único que hace es dejar que se impriman sólo unos MsgBox (que ahora probando quiero ver unos pocos para ver si hace la cuenta, pero luego no sé como interrumpir la ejecución).
El error que me sale al final de la ejecución es:
Error de sintaxis (falta operador) en la expresión de consulta 'NIF ='He comprobado que si pongo NIF = 3, en vez de trabajadores![NIF] en la consulta, el error no sale; sin embargo, con lo que tengo me sale bien para los N mensajes que imprimo con el MsgBox. ¿Alguien ve el problema? Gracias de antemano.
Option Compare Database
Private Function Controlar_Mensaje(Cuenta As Integer, Mensaje As String)
On Error GoTo Err_Controlar_Mensaje
    Dim MAX_MENSAJES As Integer ' Limite para MsgBox
    MAX_MENSAJES = 2
        
    If (Cuenta < MAX_MENSAJES) Then
        MsgBox Mensaje
    Else
        If (MAX_MENSAJES = Cuenta) Then
            MsgBox "Se ha llegado al limite de mensajes. No se imprimen más."
        End If
    End If
    Controlar_Mensaje = Cuenta + 1
Exit_Controlar_Mensaje:
    Exit Function
Err_Controlar_Mensaje:
    MsgBox "Fallo en Controlar_Mensaje: " & Err.Description
    Resume Exit_Controlar_Mensaje
    
End Function
Public Function Calcular_Periodos_Trabajo()
On Error GoTo Err_Calcular_Periodos_Trabajo
    Calcular_Periodos_Trabajo = 1
    
    Dim numMensajes As Integer
    numMensajes = 0
    
    Dim trabajadores As Recordset
    Dim contratos As Recordset
    Dim basedatos As Database
    Dim qryTrab As String
    
    Set basedatos = CurrentDb
    Set trabajadores = basedatos.OpenRecordset("Trabajad")
    
    While Not trabajadores.EOF
        Set contratos = basedatos.OpenRecordset("SELECT * FROM Contrats WHERE [NIF] = " & trabajadores![NIF])
        If (contratos.RecordCount() = 0) Then
            numMensajes = Controlar_Mensaje(numMensajes, "NO HAY PARA " & trabajadores![NIF])
        Else
            trabajadores.Edit
            While Not contratos.EOF
                numMensajes = Controlar_Mensaje(numMensajes, "Contrato (" & trabajadores![NIF] & ") => " & contratos![Fecha_ini] & " hasta " & contratos![Fecha_fin])
                contratos.MoveNext
            Wend
            trabajadores.Update
        End If
        
        trabajadores.MoveNext
    Wend
        
    basedatos.Close
    
Exit_Calcular_Periodos_Trabajo:
    Exit Function
Err_Calcular_Periodos_Trabajo:
    MsgBox "Fallo en Calcular_Periodos_Trabajo: " & Err.Description
    Resume Exit_Calcular_Periodos_Trabajo
    
End Function
Hay alguna cosa rara como lo del trabajadores.Edit, etc. que antes asignaba valores y lo tengo que volver a hacer después. Eso está controlao ;) 
			
				 Uhm, ya no me deja editar.
Descubrí que el error era que faltaba un:
If (Not IsNull(trabajadores![NIF])) Then
Al parecer las tablas pueden tener NIFs nulos y eso provocaba el fallo en sintaxis en tiempo de ejecución.
 (nooo)