Tengo estas dos funciones que deberían hacer lo mismo pero una funciona(2) y la otra no(1): Function funcion1() Dim tdf As TableDef Dim campo As Field Set tdf = CurrentDb.TableDefs!Tabla1 For Each campo In tdf.Fields Debug.Print campo.Name Next campo End Function Function funcion2() ' Si Funciona Dim db As Database Dim tdf As TableDef Dim campo As Field Set db = CurrentDb Set tdf = db.TableDefs!Tabla1 For Each campo In tdf.Fields Debug.Print campo.Name Next campo End Function La única diferencia es la utilización de la variable db para guardar el CurrentDb. Imagino que estoy confundiendo dos conceptos muy básicos pero no sé cuáles. RESPONDE BUHO ============= Pues bajo mi humilde opinión es por que CurrentDb es un metodo, no un objeto. Solo cuando asignas con Set Mibase=CurrentDB, el objeto database es realmente Mibase. Es mas...esto lo he leido tambien en la ayuda de Access, tratando del mism tema sobre Currentdb: En las versiones anteriores de Microsoft Access, puede que haya utilizado la sintaxis DBEngine.Workspaces(0).Databases(0) o DBEngine(0)(0) para devolver un puntero a la base de datos activa. En Microsoft Access 2000 debe utilizar, por el contrario, el método CurrentDb. El método CurrentDb crea otra instancia de la base de datos activa, mientras que la sintaxis DBEngine(0)(0) hace referencia a la copia abierta de la base de datos activa. La utilización del método CurrentDb permite crear más de una variable del tipo Database que haga referencia a la base de datos activa. Microsoft Access permite todavía la sintaxis DBEngine(0)(0), pero debe considerar realizar modificaciones en su código en orden a evitar posibles conflictos en una base de datos multiusuario.