Jump to content

jesuspg

Members
  • Posts

    229
  • Joined

  • Last visited

  • Country

    Spain

About jesuspg

  • Birthday 05/22/1988

Profile information

  • Gender
    Hombre
  • Localización:
    Segovia, Castilla y León

Converted

  • Campos
    ,
  • Mi versión de Excel:
    2

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

jesuspg's Achievements

  1. Hola, partamos de la base de que se trata tan sólo un fichero de pruebas. Mi fichero original, es mucho más complejo, y contiene información personal que no puedo mostrar por aquí. De modo que he tenido que diseñar una base de datos de pruebas para corregir algunos errores que me estaba dando mi aplicación ofimática original. Se trata de una base de datos relacional sin más. Cada vez que un usuario hace click en la clave externa (Foreign Key - Fk) se debe mostrar al usuario toda la información referente a esa tabla dentro de un cuadro MsgBox. Lo he puesto dentro de la clase ThisWorkbook, por no crear un módulo. No supone ningún problema, dado que la macro se ejecuta correctamente. Gracias por el aporte. Saludos.
  2. Hola @Antoni, aquí te adjunto un ejemplo de qué es a lo que me refiero. Si haces click en las celdas de la clave externa, verás que el MsgBox no devuelve nada porque la función Find cuando busca dentro de formatos personalizados no encuentra nada. Salvo que ponga LookAt:= xlPart, pero de ser así claro... Si busco el valor 9, me va a buscar el primer valor con un 9 dentro del rango, por ejemplo 999. No sé si me explico. Un saludo, y gracias por tu tiempo. PRUEBAS.xlsm
  3. Si, si. Perdón. Me refería al formato personalizado: (Por ejemplo) VBA > Format(ActiveCell, "00000"), de manera que el valor '1' pase a ser el valor '00001'. Buena idea "LookAt:= xlPart", pero el problema con ello es que si busco por ejemplo el valor '1' me va a buscar el primer '1' que encuentre dentro del rango, por ejemplo '00111'. Y no es lo mismo el valor '1' que el '00111'. No sé si me explico. Simplemente, estamos dialogando. Esta vaina ya la solucioné, pero me gusta conocer la opinión de aquellos que tienen mucha más experiencia que yo dentro de la programación con VBA. Gracias por tu tiempo.
  4. Muchas gracias a los dos. Me sirvió de gran ayuda vuestras correciones. Un último apunte que quiero realizar es que si el valor que se está buscando con la función Find en otra tabla está formateado, entonces no lo encuentra. Por ejemplo, si busco el valor "67", pero en otra tabla está formateado como "00067", no lo va encontrar y por tanto no devuelve nada en absoluto.
  5. Gracias. Un último apunte que quiero realizar es que si el valor que se está buscando con la función Find en otra tabla está formateado, entonces no lo encuentra. Por ejemplo, si busco el valor "67", pero en otra tabla está formateado como "00067", no lo va encontrar y por tanto no devuelve nada en absoluto.
  6. Hola @Gerson Pineda, disculpa por la tardanza en responder. He estado trabajando en ello. Por aquí adjunto la solución. Si tienes cualquier comentario que realizar sobre el programa, acepto cualquier aporte. Muchas gracias por tu tiempo. PRUEBAS.xlsm
  7. Gracias es justo la función que necesitaba. Hacer un switch-case para esto, lo veía casi rídiculo. Un saludo.
  8. Hola compañeros, me gustaría saber cuál es la propiedad para que aparezca un valor por defecto dentro de un cuadro TextBox. Gracias por vuestro tiempo.
  9. Hola compañeros, tengo una consulta rápida que haceros: Quiero mostrar el nombre del mes según el número, y tengo la siguiente macro: MsgBox "Estamos en el mes: " & Month(Now) & vbCr & "Estamos en el mes: " & Format(Month(Now), "mmmm") Sin embargo, me muestra la siguiente información: Obviamente, el mes número 3 se corresponde con el mes de MARZO y no de ENERO. Agradezco cualquier tipo de ayuda. Muchas gracias por vuestro tiempo. Saludos.
  10. Hola compañeros, Tengo un error con la fórmula Find. Quiero buscar una clave externa contenida en otra tabla. Concretamente busco la clave externa número 1, sin embargo me muestra por pantalla la información referente a la clave externa número 11. En realidad, yo busco la clave externa número 1, y me devuelve el primer registro con un 1 que encuentra en la otra tabla. Quiero que me devuelva el resultado exacto conforme a la clave externa número 1, no 11, ni 111, ni 1111,... Lo muestro en el vídeo y creo que se entenderá mejor: Uso esta fórmula: Dim celda As Range, rango As Range Set celda = ActiveCell Set rango = ThisWorkbook.Sheets("LOCALIDADES").Cells(1, 1).CurrentRegion Dim claveFk As Object Set claveFk = rango.Find(What:=celda, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns) Obviamente, hay una error en la configuración de la fórmula Find, pero como no la usado nunca no logro identificar el problema. Agradezco cualquier ayuda. Gracias.
  11. Hola @Antoni, resuelto!! Pero tengo una pregunta: Existe alguna razón teórica por la cual no trabajes con "Option Base 1"?
  12. Hola de nuevo compañeros, ¿Cómo puedo hacer para mostrar toda la información contenida dentro de un array en un sólo cuadro MsgBox? Tengo el siguiente código de pruebas con dos opciones disponibles, pero ninguna de las dos funciona: Sub pruebas() ' Declaramos las variables... Dim miArray() As Variant miArray = Range(Cells(2, 1), Cells(2, 8)) ' Opción 1: ' MsgBox Join(miArray(1, 3), vbCr) ' Opción 2: For i = 0 To UBound(miArray) msgString = miArray(i) & vbCr Next i ' Mostramos el contenido del array... MsgBox "Los valores del Array son los siguientes: " & vbCr & msgString End Sub
  13. Hola de nuevo, muchísimas gracias por vuestros comentarios. El problema es que quiero replicar esto mismo a otras tablas, en las que el número de campos es diferente. Lo explico a continuación en un vídeo: El fichero contiene tres tablas (AUTONOMIAS, DATOS y EQUIPOS), cada una de ellas con un número de campos diferentes. Si el usuario hace click en la clave externa, entonces se le muestra por pantalla toda la información referente a "ese registro" en concreto. Me gustaría crear un procedimiento que primero busque el valor de "ese registro" por una función VLOOKUP, después apuntar a todo ese registro almacenándolo en una variable Array o una lista haciendo un resize hasta la ultima columna de cada tabla, luego recorrer la variable Array que contiene todos los valores de "ese registro" con un bucle, y finalmente mostrar toda esa información en un cuadro MsgBox. Espero haberme explicado bien. Lo que quiero evitar es precisamente trabajar con este código tan farragoso, y evitar tener que corregir manualmente cada uno de los datos contenidos en las tablas: 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, autonomias As Range, datos As Range Set celda = Selection Set autonomias = ThisWorkbook.Sheets("AUTONOMIAS").Cells(1, 1).CurrentRegion Set datos = ThisWorkbook.Sheets("DATOS").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.ActiveSheet.Cells(1, columna) = "FK AUTONOMIA" And celda.Column = columna Then ' Notificamos al usuario con un mensaje de información... MsgBox Prompt:="> PK AUTONOMIA: " & Application.VLookup(celda, autonomias, 1, False) & vbCr & _ "> AUTONOMIA: " & Application.VLookup(celda, autonomias, 2, False) & vbCr & _ "> CAPITAL: " & Application.VLookup(celda, autonomias, 3, False), _ Buttons:=vbInformation, _ Title:="CLAVE EXTERNA DE LA TABLA AUTONOMIAS" ' Si el nombre de la columna coincide, entonces... ElseIf ThisWorkbook.ActiveSheet.Cells(1, columna) = "FK DATO" And celda.Column = columna Then ' Notificamos al usuario con un mensaje de información... MsgBox Prompt:="> PK DATO: " & Application.VLookup(celda, datos, 1, False) & vbCr & _ "> FK AUTONOMIA: " & Application.VLookup(celda, datos, 2, False) & vbCr & _ "> NUMERO DE HABITANTES: " & Application.VLookup(celda, datos, 3, False) & vbCr & _ "> SUPERFICIE: " & Application.VLookup(celda, datos, 4, False) & vbCr & _ "> DENSIDAD DE POBLACION: " & Application.VLookup(celda, datos, 5, False), _ Buttons:=vbInformation, _ Title:="CLAVE EXTERNA DE LA TABLA DATOS" ' En caso contrario... Else End If Next columna End Sub Adjunto el nuevo fichero para iniciar pruebas. Muchas gracias por vuestro tiempo y dedicación. PRUEBAS.xlsm
  14. Es decir, si el usuario hace click en el valor de la celda "2" del campo "FK TABLA" en la tabla de "RESULTADOS", que ese evento APUNTE directamente al registro de la clave primaria de la "TABLA" (Valores: 2, ARAGON, ZARAGOZA) y muestre toda esa información en un msgbox a través de un array o lista de valores. Se me ocurre algo como la siguiente: Option Base 1 ... Dim ultimaColumna As Byte ultimaColumna = ThisWorkbook.Sheets("TABLA").Cells(1, 10000).End(xlToLeft).Column Dim registro As Variant registro = Array(1 To UBound(ultimaColumna)) For each registro to ultimaColumna Msgbox registro[i] Next registro
×
×
  • Create New...

Important Information

Privacy Policy