Macro para devolver datos de una bd (en la misma hoja) a una planilla según item seleccionado de un listbox (en la hoja)

Tengo la siguiente macro en un módulo con el fin de cargar datos en una plantilla que tengo en una hoja

Sub CargarEP()
'
Dim blnew As Boolean
Dim trows, i As Long
Dim Cargar As String
Cargar = MsgBox("Deseas cargar la sesión seleccionada?", vbYesNo)
If Cargar = vbNo Then Exit Sub
blnew = False
trows = Worksheets("EP").Range("AA1").CurrentRegion.Rows.Count
On Error GoTo Error
For i = 2 To trows
    'If Trim(NombreProgramaBox.Text) = Trim(Worksheets("EP").Cells(i, 2).Value) Then
    If Trim(NombreProgramaBox.Text) = Trim(Worksheets("EP").Cells(i, 28).Value) Then
        GoTo ingresar:
ingresar:
Set h1 = Sheets("EP")
        'h1.Range("L11") = Worksheets("EP").Cells(i, 12).Value
        h1.Range("L11").Value = Worksheets("EP").Cells(i, 37).Value
MsgBox "Los datos se han pasado con éxito", vbInformation, "CARGAR"
End If
Exit For
Next i
blnew = True
Exit Sub
Error:
MsgBox "Error al cargar", "ATENCIÓN"
End Sub

He estado haciendo pruebas y solo he puesto un dato a cargar, a modo de prueba, pero no me funciona. Me salta la primera pregunta y al darle a si ya no hace nada más la macro. 

La base de datos se encuentra en la misma hoja a partir del rango AA1 en adelante. En la misma hoja tengo un listbox y varios filtros con la idea de que al elegir un item, y pulsar el botón de cargar (al cual va la macro) pase los datos de toda la fila a la planilla.

Igual este modelo de código que he puesto no me sirve para lo que pretendo, pero yo es por el que me he orientado segun otras macros que tengo en mi programa; si algun experto me puede ayudar.

2 Respuestas

Respuesta
1

H   o la:

Recomendaciones: No deberías utilizar las sentencias On Error, ya que al existir algún error, no podrías identificar cuál realmente es el problema. La lógica de un programa debería contemplar todas las situaciones y no brincar de un lado a otro, definitivamente, el uso de On Error, no ayuda a comprender el proceso.

Si entiendo bien, quiere seleccionar un registro en base a unos filtros, después de seleccionar ese registro, quieres pasar los datos a un formato que tienes en la misma hoja, ¿es correcto?

Envíame tu archivo para revisar cómo tienes los datos, me explicas con un ejemplo lo que quieres hacer.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Esteban Tierra Arias” y el título de esta pregunta.

¡Gracias! 

Lamento no poder enviarte el archivo, es muy pesado y tiene varias bases de datos, me es imposible.

He establecido en una parte del programa, en una hoja, una plantilla que yo voy rellerando con un formulario (en el que ya me ayudaste en otras ocasiones) y una vez he completada la plantilla, entre otras cosas, guardo los datos bajo un nombre, cliente, tipo, etc, y he hecho la base de datos en la derecha de la plantilla, a partir de AA1 en adelante de columnas.

El tema es que yo quiero ahora poder revolcar los datos a la plantilla (una vez filtrado en un listbox que tengo en la hoja y lo arranco con un evento activate, cuando selecciono un item) desde la base de datos para poder imprimir, modificar algo y duplicar... Hasta ahora en todo lo que he trabajado es el primer caso que se me da para volcar de una parte de la hoja a una plantilla (lo que supone volcar a celdas específicas, no es lo típico de crear fila tras fila..)

Ese código es una adaptación de otro que uso para cargar datos a un formulario desde una base de datos, pero yo los interpreto como buenamente puedo, llevo 6 meses "programando" autodidacta, poco a poco. Es posible que esté mal o no me sirva, pero es por lo que intenté empezar. Lo que me comentas del error ya me he dado cuenta pero en códigos que busco aparece así..

En el caso, partí de que al seleccionar un item, pasar el nombre al textbox y a partir de ahi pulsar el botón de cargar (donde va el módulo sobre el que puse la macro anterior). Pero lo ideal seria pulsar el botón cargar de cualquier elemento que seleccione en el propio listbox.

Si se te ocurre algo te lo agradezco sino le seguiré dando vueltas jaja

Un saludo

No me envíes tu archivo, envíame solamente la hoja con algunos ejemplos.

No entiendo tu código.

O pon imágenes de lo que tienes y de lo que quieres hacer.

Explícame con un ejemplo lo que quieres hacer.

Vale Dante, te adjunto una foto en un excel aparte que he adaptado como he podido y con lo justo para que entiendas el proceso que quiero hacer. Como ves en el listbox aparecen los programas de la base de datos (a partir de AA2) y he seleccionado "Tono 1" lo cual al darle al botón "Cargar" quiero que vuelque los datos de dicho programa en la plantilla. En la foto los he puesto manualmente. No hace falta que me pases todo, con tener una idea ya luego lo completo yo, pero cada dato se va a la plantilla a una celda específica, no me vale un rango.

Espero que pueda servirte de ayuda para que me ayudes. Un saludo y gracias de antemano.

Te anexo el código

Private Sub CommandButton1_Click()
'---
'   Por.Dante Amor
'---
    If ListBox1.ListIndex = -1 Then
        MsgBox "Selecciona un registro del list"
        Exit Sub
    End If
    '
    nombre = ListBox1.List(ListBox1.ListIndex)
    Set b = Columns("AB").Find(nombre, lookat:=xlWhole)
    If Not b Is Nothing Then
        Range("L4") = Cells(b.Row, "AC")    'nombre
        Range("L5") = Cells(b.Row, "AD")    'código
        Range("L6") = Cells(b.Row, "AE")    'tipo
    End If
    MsgBox "Los datos se han pasado con éxito", vbInformation, "CARGAR"
End Sub

Los datos en la columna AB deben ser únicos, si tienes datos repetidos, hay que buscar otra solución.

R ecuerda cambiar la valoración a la respuesta. Sal u dos

¡Gracias! 

Lo he adaptado a la plantilla original y funciona perfecto, se cargan los datos sin problema desde la base de datos. Una vez más agradecido por tu sabiduría Dante, un abrazo.

Respuesta

Acá tienes unas serie de ejemplos que se ajustan a lo que necesitas

https://www.youtube.com/playlist?list=PLdK9H5dMIfQhCuim_Sw4MwbYx1Q5eqF9z

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas