Usar RFEdit. Ctrl para Obtener nombre de Libro y Hoja

Ya funciona el código que me Proporcionaste:

Private Sub ComboBox1_Change()
'Por.Dante Amor
    hoja = Workbooks(ComboBox1.Value).Sheets(1).Name
    RefEdit1 = "='[" & ComboBox1 & "]" & hoja & "'!A1"
End Sub
'
Private Sub ComboBox2_Change()
'Por.Dante Amor
    hoja = Workbooks(ComboBox2.Value).Sheets(1).Name
    RefEdit2 = "='[" & ComboBox2 & "]" & hoja & "'!A1"
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    For Each l In Workbooks
        ComboBox1.AddItem l.Name
        ComboBox2.AddItem l.Name
    Next
End Sub
'
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = 0
End Sub

Solo Dime Donde puedo ingresar este Codigo:

celda_2 = libro2.Address
hoja_2 = libro2.Worksheet.Name
libro_2 = libro2.Worksheet.Parent.Name

Para Guardar poder guardar Datos del Workbook

1 Respuesta

Respuesta
1

Te anexo el código completo

Private Sub ComboBox1_Change()
'Por.Dante Amor
    hoja = Workbooks(ComboBox1.Value).Sheets(1).Name
    RefEdit1 = "='[" & ComboBox1 & "]" & hoja & "'!A1"
End Sub
'
Private Sub ComboBox2_Change()
'Por.Dante Amor
    hoja = Workbooks(ComboBox2.Value).Sheets(1).Name
    RefEdit2 = "='[" & ComboBox2 & "]" & hoja & "'!A1"
End Sub
'
Private Sub CommandButton1_Click()
'Por.Dante Amor
    'Datos del primer libro
    Set r1 = Range(RefEdit1)
    celda_1 = r1.Address
    hojas_1 = r1.Worksheet.Name
    libro_1 = r1.Worksheet.Parent.Name
    '
    'Datos del segundo libro
    Set r2 = Range(RefEdit2)
    celda_2 = r2.Address
    hojas_2 = r2.Worksheet.Name
    libro_2 = r2.Worksheet.Parent.Name
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    For Each l In Workbooks
        ComboBox1.AddItem l.Name
        ComboBox2.AddItem l.Name
    Next
End Sub
'
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = 0
End Sub
'
Private Sub ComboBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = 0
End Sub

Hola Dante

una Duda me podrias explicar por que en la funcion Private sub Combo...Keypress...

tiene " KEyAscii=0 "

Saludos!!..

Eso corresponde a otro tema, tendrías que crear otra pregunta, jajaja, No es cierto.

Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)    KeyAscii = 0End Sub

Lo anterior lo utilizo para que NO puedas capturar ninguna letra en el combobox.

¿Y por qué lo puse?

Lo puse para que únicamente seleccionaras un dato del combo. El éxito del RefEdit radica en que selecciones previamente un libro en el combo, si el dato que pongas en el combo no es un libro, entonces el RefEdit no va a funcionar, es por eso que en los combos sólo deberías permitir valores válidos.

Hola Dante

SI, me estaba imaginando que me dirías algo parecido...jejejeje... pero gracias por la breve explicación.. ahora entiendo...

Y otra duda.. no se si cree otra pregunta o te la diga aquí.. te la pongo y ya me dices si va por otra pregunta...

  'Datos del primer libro    Set r1 = Range(RefEdit1)    celda_1 = r1.Address    hojas_1 = r1.Worksheet.Name    libro_1 = r1.Worksheet.Parent.Name

intento seleccionar la celda de esta forma:    

    Celda_1.Select
     BB = ActiveCell.Column

Pero me sale un error.. "424" se requiere un objeto... ¿no entiendo por que?..

Y la variable "BB" es para trabajar en esa columna...

Saludos!.

Las explicaciones es algo más complicado. Pero te comento.

Tengo declarado el objeto r1.

En ese objeto estoy asignando el contenido del objeto Range

Y dentro de Range está el valor de RefEdit

Set r1 = Range(RefEdit1)    celda_1 = r1.Address

Después, paso el contenido de la propiedad Address del objeto r1 a la variable celda_1

Luego entonces, en la variable celda_1 tengo un string.

Si en RefEdir pusiste esto:

[Libro4]Hoja1!$C$9

Entonces en la variable celda_1 vas a tener esto:

"$C$9"

En la variable hoja_1 vas a tener esto:

"Hoja1"

Y en la variable libro_1 vas a tener esto:

"Libro4"


Por lo tanto, no puedes poner esto

celda_1.select

Que sería equivalente a:

"$C$9".select

celda_1 no es un objeto.


En VBA se utilizan los objetos, es mejor programar la macro, utilizando los objetos.

Por ejemplo, si quieres el valor de la celda "C5", de la hoja "general", con objetos sería así:

valor = sheets("general").range("C5")


Lo que NO deberían hacer, pero lo hacen:

sheets("general").select

range("C5").select

valor = activecell


Entiendo que quieres aprender y te surgen muchas dudas.

Con todo gusto te ayudo con todas tus inquietudes, valora esta respuesta y crea una nueva pregunta por cada petición.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas