Access subformulario hoja de datos, ¿Cómo detectar desde el form principal en qué campo está situado el cursor?

Cuando utilizo subformularios del tipo hoja de datos, desde el formulario principal sé cómo detectar en qué registro del subformulario estoy ubicado (da igual en qué campo esté situado el cursor), pero no sé cómo detectar en qué campo del registro está el cursor.

2 Respuestas

Respuesta

Muchas Gracias Juan Carlos buscaba y buscaba por toda la red y no encontraba nada que me ayudara con las propiedades que tenia que utilizar.

Julian, Juan hace referencia no a la vista de hoja de datos de una tabla, si no a la vista de hoja de datos de un SubFormulario. Listo por medio de un MsgBox pude identificar que Columna y Fila me encuentro de la siguiente manera:

En la Vista Diseño del Formulario que contiene mi SubFormulario, empecé probando insertado un evento al hacer clic sobre el cuadro (contenido dentro del SubFormulario mencionado, con vista de hoja de datos), en VBA inserte el siguiente código.

En Módulos, cree un Modulo de nombre Modulo1 para crear dos variables de tipo publica (pues tengo intenciones de almacenar la columna y fila de la hoja seleccionar para interactuar con ellos desde otro formulario).

Modulo1

________________________________________________________________________

Option Compare Database
Option Explicit

Public HojaEntradaColumn As String
Public HojaEntradaRow As String

________________________________________________________________________

En el SubFormulario de nombre "Form_1SubFormulario_SGA_entrada2":

_______________________________________________________________________

Option Compare Database

Private Sub idParte_Click() 'nombre del campo/objeto en la hoja de datos "idParte"

Modulo1.HojaEntradaColumn = Me. SelLeft 'Para guardar en variable la columna de la hoja seleccionada
Modulo1.HojaEntradaRow = Me. SelTop 'Para guardar en variable la fila de la hoja seleccionada
MsgBox ("Hola esto es una Caja/Cuadro de Mensaje. Columna numero (" & Modulo1.HojaEntradaColumModulo1.HojaEntradaColum & ") y Fila numero (" & Modulo1.HojaEntradaRow = Me.SelTopModulo1.HojaEntradaRow = Me.SelTop & ")")

End Sub

__________________________________________________________________________________

Hasta aquí voy bien. Pero tengo dos dudas:

1) ¿Cómo escribir sobre una columna y celda especifica de un subFormulario con vista de Hoja de Datos?

2) ¿Cómo hacer lo que requiero en la pregunta 1 desde otra ventana de Formulario?, entiendo que ambos formularios estarían abiertos, el 2do formulario seria para realizar una consulta y que el valor que seleccione se sobrescriba en la columna y fila del subFormulario1, pero no se que sintaxis utilizar. Se como guardar el valor de texto en un ListBox (cuadro de lista) el que estaría en la consulta del Formulario2 pero desconozco como direccionar desde ese formulario a el Formulario1. Si lo soluciono compartiré mi respuesta en este mismo hilo.

Respuesta
2

Una forma sencilla es que en vista diseño del subformulario selecciones todos los cuadros de texto y pulses Formato Condicional-Nueva regla y elige El campo tiene el foco y elige que color de letra o fondo quieres que tenga ese control si el cursor está allí.

Gracias por tu respuesta, Icue, pero no lo necesito por una cuestión visual: imagina que el subformulario muestra una consulta de referencias cruzadas con meses en el eje X (de enero a diciembre), años en el eje Y, y un total en cada "casilla". Mi necesidad es que al pinchar en cada "casilla" del grid saber qué mes y qué año he elegido, para en un tercer subformulario mostrar el detalle. Saber en qué fila (año) he puesto el cursor es fácil, ya que el año es el primer campo del registro, pero ¿cómo puedo "extraer" del subformulario la columna (mes) que he pinchado? Osea, cuando pongo el cursor en un campo de un registro (fila horizontal), ¿cómo puedo saber en qué campo he puesto el cursor (columna vertical) de modo que pueda "capturarlo" para enlazar con otro subformulario?

Lo lamento, siento no poder ayudarte.

Yo creo que no se puede hacer, pero me gustaría que algún experto me lo confirmara.

No soy tan rotundo, pero al menos yo no lo sé.

Increíblemente por la coincidencia, justo un año después de plantear la primera pregunta (el 6 de abril) he encontrado cómo avanzar un poco en la resolución de mi problema: con la propiedad SelLeft puedo saber en qué campo del subformulario (qué columna del grid de hoja de datos) estoy posicionado. También he descubierto la propiedad SelTop que me dice en qué fila he pinchado, aunque eso ya lo tenía resuelto preguntando por algún campo concreto del subformulario. 

Ahora lo último que me queda es encontrar la manera de obtener dicho dato cada vez que pincho en el subformulario sin cambiar de registro: al cambiar de registro en el evento Current capturo qué fila y columna he pinchado, pero si no me salgo del mismo registro (con el ratón o moviéndome campo a campo con el cursor), no se ejecuta el evento Current.

Es decir, ahora el problema se reduce a: ¿qué evento se produce cuando te mueves de un campo a otro del mismo registro de un subformulario? o dicho de otra manera, ¿cómo puedo "enterarme" por código que he cambiado de campo dentro de un mismo registro?

Una solución que funcionaria pero que he desechado es capturar SelTop y SelLeft con el evento AlTimer y un intervalo p.ej. de 100, ya que el cursor empieza a parpadear.

Tangencialmente, se me ocurre una manera un poco original de saber en qué columna estoy: seleccionar el contenido de la celda cada vez que me poso en una diferente, para después copiar al portapapeles y pegar en donde me interese para desencadenar el cambio en otro subformulario. ¿alguien sabe cómo conseguir que la simple posición en un campo resulte en una selección de su contenido completo, sin doble click ni selección?

Gracias de antemano por leer este tocho.

Evento como tal no hay ninguno, lo que si puedes es combinar Al perder el enfoque de un control con el evento Al recibir el enfoque de otro

Gracias por tu respuesta Icue, pero es un subformulario en vista Hoja de Datos, por lo que al pasar de un campo a otro de un mismo registro (incluso aunque cambie de registro) sigo en el mismo control y no se lanzan los eventos de perder/recibir el enfoque.

En el tiempo que llevo en esto de Access, y es bastante, nunca le he visto ni una sola ventaja a los formularios en vista hoja de datos. Mira el formulario de la imagen, está hecho en vista hoja de datos

Dime en que se diferencia del siguiente que está hecho en vista formularios continuos

Independientemente de que en ambos casos los controles tienen el evento Al preder el enfoque, al recibir el enfoque, etc.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas