MOSTRAR INFORMACION DE UNA TABLA EN UN MSGBOX USANDO ARRAY
publicado
Hola compañeros, necesito solucionar el siguiente problema:
"Tengo dos tablas de ejemplo, una se llama TABLA y la otra RESULTADOS.
Cada una de ellas contiene su propia clave primaria.
Tabla TABLA
Tabla RESULTADOS
El problema que quiero solucionar es que cada vez que un usuario haga click en una de las celda del campo FK TABLA, se le muestre toda la información detallada de ese registro en concreto, tal y como se muestra en la siguiente imagen.
Video DEMO
Espero que con el vídeo anterior se vea claramente lo que quiero conseguir.
Este es el código que utilizo.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Limpiamos los errores anteriores...
Err.Clear
' Tratamos los errores...
On Error Resume Next
' Declaramos las variables de ámbito local...
Dim columna As Byte, ultimaColumna As Byte
columna = 1
ultimaColumna = ThisWorkbook.ActiveSheet.Cells(1, 10000).End(xlToLeft).Column
Dim celda As Range, tabla As Range
Set celda = Selection
Set tabla = ThisWorkbook.Sheets("TABLA").Cells(1, 1).CurrentRegion
' Recorremos las columnas de la tabla...
For columna = 1 To ultimaColumna
' Si el nombre de la columna coincide, entonces...
If ThisWorkbook.Sheets("RESULTADOS").Cells(1, columna) = "FK TABLA" And celda.Column = columna Then
' Notificamos al usuario con un mensaje de información...
MsgBox Prompt:="> PK TABLA: " & Application.VLookup(celda, tabla, 1, False) & vbCr & _
"> PROVINCIA: " & Application.VLookup(celda, tabla, 2, False) & vbCr & _
"> CAPITAL: " & Application.VLookup(celda, tabla, 3, False), _
Buttons:=vbInformation, _
Title:="CLAVE EXTERNA DE LA TABLA"
' En caso contrario...
Else
End If
Next columna
End Sub
Así funciona correctamente. Pero, ¿qué pasa? Que este es un ejemplo sencillo de lo que quiero conseguir. En mi aplicación de Excel de verdad utilizo 200 tablas diferentes con 50 campos cada una de ellas (por exagerar un poco).
El problema con el código anterior es que tan sólo es válido para la tabla anterior, así que me gustaría desarrollar un código más genérico y optimizado al mismo tiempo. Es decir, incluir todo en un array o en una lista, y mostrar toda esa información en tan sólo 4 o 5 líneas de código.
Os adjunto el fichero para las pruebas."
Espero haberme explicado bien, cualquier duda por favor comenten.
Agradecería cualquier tipo de aporte que me pueda ayudar a enfocar el problema.
Hola compañeros, necesito solucionar el siguiente problema:
"Tengo dos tablas de ejemplo, una se llama TABLA y la otra RESULTADOS.
Cada una de ellas contiene su propia clave primaria.
Tabla TABLA
Tabla RESULTADOS
El problema que quiero solucionar es que cada vez que un usuario haga click en una de las celda del campo FK TABLA, se le muestre toda la información detallada de ese registro en concreto, tal y como se muestra en la siguiente imagen.
Video DEMO
Espero que con el vídeo anterior se vea claramente lo que quiero conseguir.
Este es el código que utilizo.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' Limpiamos los errores anteriores... Err.Clear ' Tratamos los errores... On Error Resume Next ' Declaramos las variables de ámbito local... Dim columna As Byte, ultimaColumna As Byte columna = 1 ultimaColumna = ThisWorkbook.ActiveSheet.Cells(1, 10000).End(xlToLeft).Column Dim celda As Range, tabla As Range Set celda = Selection Set tabla = ThisWorkbook.Sheets("TABLA").Cells(1, 1).CurrentRegion ' Recorremos las columnas de la tabla... For columna = 1 To ultimaColumna ' Si el nombre de la columna coincide, entonces... If ThisWorkbook.Sheets("RESULTADOS").Cells(1, columna) = "FK TABLA" And celda.Column = columna Then ' Notificamos al usuario con un mensaje de información... MsgBox Prompt:="> PK TABLA: " & Application.VLookup(celda, tabla, 1, False) & vbCr & _ "> PROVINCIA: " & Application.VLookup(celda, tabla, 2, False) & vbCr & _ "> CAPITAL: " & Application.VLookup(celda, tabla, 3, False), _ Buttons:=vbInformation, _ Title:="CLAVE EXTERNA DE LA TABLA" ' En caso contrario... Else End If Next columna End Sub
Así funciona correctamente. Pero, ¿qué pasa? Que este es un ejemplo sencillo de lo que quiero conseguir. En mi aplicación de Excel de verdad utilizo 200 tablas diferentes con 50 campos cada una de ellas (por exagerar un poco).
El problema con el código anterior es que tan sólo es válido para la tabla anterior, así que me gustaría desarrollar un código más genérico y optimizado al mismo tiempo. Es decir, incluir todo en un array o en una lista, y mostrar toda esa información en tan sólo 4 o 5 líneas de código.
Os adjunto el fichero para las pruebas."
Espero haberme explicado bien, cualquier duda por favor comenten.
Agradecería cualquier tipo de aporte que me pueda ayudar a enfocar el problema.
Muchas gracias por vuestro tiempo.
Saludos.
PRUEBAS.xlsm