Existe una sutíl pero indispensable diferencia en la forma que declaras los objetos, a la forma en que lo he hecho yo.
Database y Recordset no son nada si no pertenecen a ADO ADODB o a otro componente proveedor de datos.
Te aconsejo que csiempre que te ocurran cosas así, no des por hecho que en otra parte del código te funcionan e investiga en profundidad las propiedades de todo aquello que has declarado (Con Mayúsc+F9 puedes inspeccionar todos los objetos). Estate segiro que proporcionan una información relevante para subsanar problemas.
Código:
Option Explicit
Public tipo As String
Public base As dao.Database
Public REG As dao.Recordset
Public sql As String
Espero que te reulte útil el consejo.