Como puedo IMPORTAr directamente a un userform DATOS de otro libro ? Agradecido de antemano

Quiero aligerar mi libro "A" y estoy pensando enviar algunas hojas a un nuevo libro "B" pero como puedo traer del nuevo libro "B" un dato que necesito al userform del libro "A" y aparte guardar en el libro "B" el dato modificado

3 Respuestas

Respuesta
1

Apliando las respuestas tambien podrias usar de la siguinete manera

Private Sub CommandButton2_Click()

Ruta = "C:\Users\usuarioX\Desktop\"
nombre = "libro b.xlsx"

Workbooks.Open Filename:=Ruta & nombre
Sheets("BD").Select
    Set h = Sheets("results")
    Set b = h.Columns("A").Find(TextBox1)
        If Not b Is Nothing Then
        b.Select
            If b = TextBox1.Value Then
            TextBox2 = h.Cells(b.Row, "b")
            End If
        End If
Windows(nombre). Activate
ActiveWindow. Close

End Sub

Donde

Ruta es donde estas el archive guardado

Nombre es el nombre del libro

Estos es el caso de que busque algo en especifico y quieras cargar la informacion que tienes en la columna B

Respuesta
1

Hay muchas maneras de escribir una instrucción que se refiera a libro, hoja y celda.

Esto mi ejemplo muestro el contenido del libro B al momento de abrir el UF y desde un botón comando lo devuelvo modificado.

Private Sub UserForm_Initialize()
'muestra el dato del libro2, Hoja 1 y celda C7
TextBox1 = Workbooks("LibroB.xlsm").Sheets(1).[C7]
End Sub
Private Sub CommandButton1_Click()
'devuelve al libro2 el valor del textbox ya modificado
Workbooks("LibroB.xlsm").Sheets(1).[C7] = TextBox1
End Sub

Estoy asumiendo que el libro ya se encuentra abierto.

Otro modo es declarando una variable para el libro/Hoja. Solo debes recordar de declararla al inicio del UF para poder utilizarla en eventos diferentes:

Dim libroHoja
Private Sub UserForm_Initialize()
'se declara el 2do libro y su hoja
Set libroHoja = Workbooks("LibroB.xlsm").Sheets("Hoja1")
'muestra el dato del libro2, Hoja 1 y celda C7
TextBox1 = libroHoja.[C7]
End Sub
Private Sub CommandButton1_Click()
'devuelve al libro2 el valor del textbox ya modificado
libroHoja.[C7] = TextBox1
End Sub

Sdos y no olvides valorar la respuesta si resuelve tu consulta. Sino comenta y la seguimos tratando.

Respuesta
1

Tienes que cambiar la lógica de tu código.

Te anexo los ejemplos para traer el dato y para actualizar el dato. El "libro B.xlsx" debe estar abierto.

Private Sub CommandButton1_Click()
'Por.Dante Amor
    'Para traer el dato al textbox1
    Set l1 = ThisWorkbook
    Set l2 = Workbooks("Libro B.xlsx")
    Set h2 = l2.Sheets("Hoja1")         'hoja del libro2
    TextBox1 = h2.Range("B5")
End Sub
'
Private Sub CommandButton2_Click()
'Por.Dante Amor
    'Para poner el dato en el libro b
    Set l1 = ThisWorkbook
    Set l2 = Workbooks("Libro B.xlsx")
    Set h2 = l2.Sheets("Hoja1")         'hoja del libro2
    h2.Range("B5") = TextBox1.Value
    msgox "Dato actualizado"
End Sub

Avísame cualquier duda.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Muchisimas gracias por la respuesta, recien ahora lo estoy llevando a practica, y me esta funcionando. Mi consulta  es para extraer dato de un libro cerrado, de antemano mil gracias

Le pregunto esto para proteger la informacion que no quiero q observe el usuario

Este código que estás viendo es VBA (Visual Basic for Applications) . Para extraer información de un libro cerrado, tendrás que utilizar código VB (Visual Basic), puedes introducir las sentencias directamente en VBA, este es un ejemplo:

Private Sub TextBox1_Change()
    bd = ThisWorkbook.Path & "\base.xlsx"
    'Set conexion = New ADODB.Connection
    'Set datos = New ADODB.Recordset
    Set conexion = CreateObject("adodb.connection")
    Set datos = CreateObject("adodb.recordset")
    conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & bd & "; Extended Properties=""Excel 12.0; HDR=YES"";"
    Sql = "SELECT * FROM [clientes$]" & " where [edad] " & Me.TextBox1.Text '& "%'"
    datos.Open Sql, conexion
    LSTCLIENTES.Clear
    Do While Not datos.EOF
        Me.LSTCLIENTES.AddItem (datos.Fields.Item("nombres").Value)
        Me.LSTCLIENTES.List(LSTCLIENTES.ListCount - 1, 1) = datos.Fields.Item("edad")
        datos.MoveNext
    Loop
    conexion.Close
    Set datos = Nothing
    Set conexion = Nothing
End Sub

El código anterior leer información del archivo base.xlsx, dicho libro está cerrado. No tengo código para guardar datos en un libro cerrado; tendrás que buscar en la red.

Como puedes ver, es más complicado.


Otra opción, es abrir el libro durante la ejecución, poner el dato, guardar el libro y volver a cerrar el libro. Eso sucede de forma "invisible" para el usuario.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas