Sinceramente … o tu explicación no la entiendes ni tú o es un absoluto despropósito lo que se intenta.
Estamos en un formulario (que como referenciamos con 'Me' puede ser cualquiera llamarse como quiera etc....) pero se cumple que es el formulario activo.
Por otra parte aparece un dato ('IdLampara') cuya procedencia es (a momento actual) desconocida y del cual 'se supone' que tiene una relación con …..
en el formulario activo (que define 'me') parece que existe un campo cuyo nombre es: Form!Ficha_Lampara (no creo que Access interprete eso como un nombre valido) por lo que como también me considero con derecho a suponer, DEDUZCO que el campo es 'Ficha_Lampara' asi que la referencia correcta de este termino es:
Me.Ficha_Lampara (también se puede escribir asi: Me!Ficha_Lampara)
Lo comparamos con IdLampara (que seguimos desconociendo su origen)
IF Me.Ficha_Lampara = IdLampara Then ……
Si se cumple se ajusta una propiedad de otro objeto:
Me.Comando83.Enabled = False …… Curiosamente esto DES-Habilita el objeto (al contrario de lo que se pretende)
Y tras ello se abre un formulario:
DoCmd.OpenForm "Ficha_Lampara"
Pero ese formulario ¿Qué origen de datos tiene?, porque si no se le filtra, abrirá en el primer registro (y solo acertaría con la lampara de nuestro interés por casualidad).
--------------------------------------
Vamos a partir de un supuesto, tenemos una tabla con detalles de objetos (sean lamparas o bombillas, el objeto es lo de menos), se debería cumplir que:
.- Si hay detalles … tenemos un registro que los contiene
.- Si no hay detalles … NO tenemos un registro es esa tabla
Ya tenemos información para aplicar metodología
.- SI hay detalles deseamos que un botón este habilitado (nos permitiría abrir un formulario, generalmente emergente con ESOS particulares detalles)
.- Si no hay detalles, el botón debería estar deshabilitado
Tenemos un ID en alguna parte (el cual se supone es el que genera la relación entre el objeto y 'sus' detalles) lo utilizaremos para ver si hay un registro (esto es: si para ese ID tiene asociado detalles)
Me.Comando83.Enabled = DCount("*", "[la tabla detalles]","IdLampara = " & Me.Ficha_Lampara)
(si no hay registros asociados, DCount devolverá un cero => False, si los hay un valor diferente de cero => TRUE)
APARTE en el botón que supuestamente mostraría los detalles (al click del botón) se le indica que abra el formulario pero EN el registro de nuestro interés:
DoCmd.OpenForm "Ficha_Lampara",,,"IdLampara = " & Me.Ficha_Lampara
(si: es la misma condición que se utilzo para ver si existía)
No existe inconveniente en que (reutilizando algo pero con sensatez) se aplique el clásico IF … THEN … ELSE (lo que es escribir se puede hacer con lápiz, bolígrafo o pluma o incluso virtualmente como es esto, lo importante es que se transmita el mensaje con veracidad)