Imprimir página | Cerrar ventana

Tabla referencia cruzada

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86266
Fecha de impresión: 27/Marzo/2026 a las 04:08


Tema: Tabla referencia cruzada
Publicado por: Nomada
Asunto: Tabla referencia cruzada
Fecha de publicación: 20/Febrero/2022 a las 13:51
Buenas.
Tengo un formulario (F_Estadistica) con dos campos independientes de fecha (vfechadesde, vfechahasta), desde el cual me abre otro formulario basado en una tabla dinámica dentro del periodo indicado.

Ahora al pasarlo a 64 bits, debo hacerlo con una tabla de referencia cruzada. Hasta aquí todo bien, si en Criterios de la consulta de referencia cruzada le indico una fecha concreta. Pero si en Criterios de la consulta de la tabla de referencia cruzada le indico que me busque el período de los dos campos (vfechadesde, vfechahasta), me aparece el error:

Se ha producido el error '3070' en tiempo de ejecución:
El motor de base de datos de Microsoft Access no reconoce '[Formularios]![F_Estadistica]![vfechadesde]' como un nombre de campo o expresión válidos.

Alguna sugerencia.

Resumiendo: deseo ejecutar la tabla de referencia cruzada basándose en el valor de los campos vfechadesde y vfechahasta.

Gracias y un saludo.



Respuestas:
Publicado por: lupecinda
Fecha de publicación: 24/Febrero/2022 a las 14:05
Hola.
Si lo haces por vba con Forms!Mainform!ControlName te reconoce el campo?
El campo está en el formulario F_Estadistica o dentro de un subformulario?
Saludos
Carlos


-------------
Lupita


Publicado por: Nomada
Fecha de publicación: 26/Febrero/2022 a las 12:22
Buenas.
Ambos campos (vfechadesde y vfechahasta) están en el formulario. Son campos independientes.

Lo que deseo es introducir la fecha en los campos y que ejecute la tabla de referencia cruzada, no tener que abrir la consulta para introducir los valores.

Gracias.


Publicado por: xavi
Fecha de publicación: 26/Febrero/2022 a las 17:40
Lo que deberías es abrir la consulta en modo diseño y volver a poner ese criterio de manera que veas si se produce algún cambio entre tu versión anterior de 32 bits y la nueva de 64.

Por otro lado siempre te queda el truco de utilizar una función que devuelva el valor del campo al criterio de la función. Yo lo utilizo para poder pasar valores almacenados en variables. Si tuviera que hacerlo para devolver valores de controles lo haría con una función genérica:

Algo así (en un módulo independiente)

Public Function DameUnValor(strNombreFormulario As String, strNombreCampo As Sgtring) As Variant
   DameUnValor = Forms(strNombreFormulario).Controls(strNombreCampo).Value
End Function

Y en la consulta escribiría en los criterios el nombre de la función con los argumentos necesarios. Ejemplo:
DameUnValor("F_Estadistica"; "vfechadesde")



Un saludo



-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Nomada
Fecha de publicación: 10/Abril/2022 a las 14:08
Buenas Xavi.
Con la primera solución, al tratarse de un formulario basado en una tabla dinámica con formulario único, en 64 bits solo muestra datos de registro a registro. Esto no me sirve.

La segunda solución si funciona, pero como y donde pondría el campo independiente vfechahasta que falta?
Gracias


Publicado por: xavi
Fecha de publicación: 10/Abril/2022 a las 21:01
Pues igual que cualquier otra condición Entre:

Entre DameUnValor("F_Estadistica";"vfechadesde") Y DameUnValor("F_Estadistica";"vfechahasta")


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Nomada
Fecha de publicación: 11/Abril/2022 a las 07:16
Gracias.
Eso ya lo tengo hecho en la consulta, me refiero a la función. Cómo la elaboro?
Un saludo.


Publicado por: xavi
Fecha de publicación: 11/Abril/2022 a las 08:57
Perdona pero no te entiendo... en mi mensaje ya hay una función llamada DameUnValor.

Lo único que puede pasar es que, para este caso concreto, debas realizar alguna conversión/formateo del resultado para que la consulta entienda que es una fecha.



-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Nomada
Fecha de publicación: 11/Abril/2022 a las 17:07
Veamos.
La función sería:
Public Function DameUnValor(strNombreFormulario As String, strNombreCampo As Sgtring) As Variant
   DameUnValor = Forms(strNombreFormulario).Controls(strNombreCampo).Value
End Function

Dónde van los campos vFechaDesde y vFechaHasta?

Gracias


Publicado por: xavi
Fecha de publicación: 11/Abril/2022 a las 17:30
¿Tu has probado la función? Porque verías qué pide y qué devuelve. Entendiendo eso verías que se puede utilizar en cualquier momento con los argumentos adecuados.

La función va en un módulo. En la consulta, en la fila de criterios del campo que quieres filtrar, le pones:

Entre DameUnValor("F_Estadistica";"vfechadesde") Y DameUnValor("F_Estadistica";"vfechahasta")

Máximo tendrás que trabajar el formato de fechas... pero entiendo que lo tienes más que asumido.

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Nomada
Fecha de publicación: 11/Abril/2022 a las 18:30
Después de probar la función, me dice que el número de argumentos es incorrecto.
Al tratarse de dos campos, vFechaDesde y vFechaHasta, entiendo, que la primera línea de la sintaxis de la función sería:
Public Function DameUnValor(F_Estadistica As String, vFechaDesde As String, vFechaHasta as String) As Variant

pero no entiendo cómo elaborar la siguiente línea:
DameUnValor = Forms(strNombreFormulario).Controls(strNombreCampo).Value
pues si cambio strNombreCampo por vFechaDesde, dónde añado vFechaHasta



Publicado por: lunasoft
Fecha de publicación: 12/Abril/2022 a las 18:59
Yo lo he entendido del siguiente modo.
1. Escribe la función de Xavi tal y como te la escribió
2. En los criterios de la CONSULTA (los cuadros en blanco que están abajo de cada valor que quieres mostrar, debajo de orden), en el campo fecha(supongo) llamas a la función que te dice Xavi escribiendo: Entre DameUnValor("F_Estadistica";"vfechadesde") Y DameUnValor("F_Estadistica";"vfechahasta")

-------------
Juanjo Luna (Lunasoft)
Microsoft MVP 2023

----------------

https://www.luna-soft.es/

https://www.youtube.com/ACCESSoTOTAL

https://github.com/ACCESSoTOTAL


Publicado por: Nomada
Fecha de publicación: 02/Septiembre/2023 a las 12:24
Gracias a todos.
Este hilo se puede cerrar.



Imprimir página | Cerrar ventana