Llamar a userform de un libro con un userform de otro libro

Tengo dos archivos el principal llamado ISO 9001 y otro llamado TEMA 2

El libro principal al dar click en un botón de menu quiero que abra el userform del libro TEMA 2,

Y tengo otros userform en el TEMA 2, que gurdan información en la pastaña 1.

El problema es que he intentado con el código Run, pero la información del TEMA 2 no la guarda en la petastaña 1

2 Respuestas

Respuesta
1

Tienes que hacer referencia al libro y a la hoja donde quieres guardar.

Por ejemplo:

En el libro ISO 9001 en un módulo:

Sub abrirform()
    Run "'TEMA 2.xlsm'!abrir"
End Sub

Ahora en el libro TEMA 2, en un módulo:

Sub abrir()
    UserForm1.Show
End Sub

En el libro TEMA 2, en el userform, en el botón que va a guardar datos en la hoja:

Private Sub CommandButton1_Click()
    Workbooks("ISO 9001.xlsm").Sheets("Hoja1").Range("B3") = TextBox1.Value
End Sub

Avísame si es lo que necesitas. O dime en cuál pestaña de cuál libro quieres guardar.

Sal u dos

Nota: El libro TEMA 2.xlsm debe estar abierto.

Es posible que abra el otro Userform si que este abierto??

Este es el código que uso para guardar los datos.

¿Cómo lo acomodo para que cuadre con el que me das?

Private Sub CONTINUAR_Click()
If OptionButton1 = False And OptionButton2 = False And OptionButton3 = False Then
MsgBox "Debes seleccionar una opción"
Exit Sub
End If
Set h = Sheets("ISO9001")
u = h.Range("A" & Rows.Count).End(xlUp).Row + 1
h.Cells(u, "A") = TextBox1
If OptionButton1 Then
opcion = OptionButton1.Caption
ElseIf OptionButton2 Then
opcion = OptionButton2.Caption
ElseIf OptionButton3 Then
opcion = OptionButton3.Caption
End If
h.Cells(u, "B") = opcion
Tema1b.Show
Pregunta1a.Hide
End Sub

Tienes que tener abiertos los 2 libros.

Entonces quedaría así:

Private Sub CONTINUAR_Click()
    If OptionButton1 = False And OptionButton2 = False And OptionButton3 = False Then
        MsgBox "Debes seleccionar una opción"
        Exit Sub
    End If
    Set l1 = Workbooks("ISO 9001.xlsm")
    Set h = l1.Sheets("ISO9001")
    u = h.Range("A" & Rows.Count).End(xlUp).Row + 1
    h.Cells(u, "A") = TextBox1
    If OptionButton1 Then
        opcion = OptionButton1.Caption
    ElseIf OptionButton2 Then
        opcion = OptionButton2.Caption
    ElseIf OptionButton3 Then
        opcion = OptionButton3.Caption
    End If
    h.Cells(u, "B") = opcion
    Tema1b.Show
    Unload Pregunta1a
End Sub

Los resultados se almacenan en el libro "ISO 9001.xlsm", en la hoja "ISO9001"


Avísame cualquier duda.

.

.

Hola de nuevo.

Me manda error en esta línea y me dice erro 9, subíndice fuera de intervalo

Set l1 = Workbooks("ISO 9001.xlsm")

Tienes que poner el nombre de tu libro donde vas a guardar la información, yo puse esto:

"ISO 9001.xlsm", porque al inicio de la pregunta mencionaste que así se llama tu libro principal.

Cambia ese dato por el nombre de tu libro.

Prueba nuevamente y me comentas.

Disculpa, si error mio el nombre era CURSO ISO 9001

Ya me funciono, muchísimas gracias.

Disculpa Dante, pero me salio una duda más, tengo este código pegado en diferente libro, solo cambia en donde dice Sheets("ISO9001A") por otro nombre, y en uno de los libros si me pone todos los datos en la misma fila, pero en el otro libro pone los datos en filas diferentes.

Porque pasa esto, ¿si es el mismo código?

Gracias

Set h = Sheets("ISO9001A")
u = h.Range("A" & Rows.Count).End(xlUp).Row + 1
h.Cells(u, "A") = TextBox1
If OptionButton1 Then
opcion = OptionButton1.Caption
ElseIf OptionButton2 Then
opcion = OptionButton2.Caption
ElseIf OptionButton3 Then
opcion = OptionButton3.Caption
End If
h.Cells(u, "B") = opcion

Pero antes de establecer la hoja, también tienes que establecer el libro donde se encuentra la hoja:

    Set l1 = Workbooks("otro libro.xlsm")
    Set h = l1.Sheets("ISO9001A")

Cambia "otro libro" por el nombre del diferente libro

Respuesta
1

Suponiendo que en el libro "Tema2" el que quieres abrir se llama "UserForm1", en un módulo "standard" coloca algo así:

Sub MiUserform()
UserForm1.Show
End Sub

Luego, en el libro "ISO 9001" dices que tienes un "menú" así que asumo que es un "Userform" y que tienes botones, así que en uno podrías colocar algo así:

Private Sub CommandButton1_Click()
Workbooks.Open ThisWorkbook.Path & "\TEMA 2.xlsm"
Application.Run "Tema 2.xlsm!Miuserform"
End Sub

No olvides que ahí estoy asumiendo que están en la misma capeta y que el botón se llama "CommandButton1", tú debes reemplazar por los tuyos.

Lo que no me queda claro es eso de guardar datos, da algunos detalles al respecto

Abraham Valencia

Me marca error en esta línea

Workbooks.Open ThisWorkbook.Path & "\TEMA 2.xlsm"

Esa línea te dará error por dos motivos:

1- El libro desde donde corres la macro NO está en la misma carpeta que el libro "TEMA 2.xlsm", o

2- El nombre "TEMA 2.xlsm" es incorrecto

Abraham Valencia

PD: De estar 100% seguro de que ninguno de los dos es el problema, quizá estás omitiendo algo o sería mejor que envíes el error exacto que te sale.

Efectivamente no esta en la misma carpeta, ¿es posible que funcione abriéndolo de una ubicación especifica?

Gracias

Solo debes colocar la ruta completa:

Workbooks.Open "D:\Carpeta\Subcarpeta\TEMA 2.xlsm"

Así como en ese ejemplo

Abaham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas