Como cambiar de hoja un botón para llamar a un userform
Tengo en una hoja una base de datos y en en esta misma un botón que llama a un formulario, mi intención es poner ese botón en otra hoja del mismo libro para llamar al mismo formulario y trabajar con la misma bd pero que no se vea la hoja de la bd, intento poniendo el botón en otra hoja asigno la misma macro al botón pero me aparece el "error 1004 en tiempo de ejecución" error en el método select de la clase range
¿Alguien qué me ayude?
2 respuestas
No dejaste indicada cuál es la línea de error. Pero seguramente la primera está en el evento INItialize cuando seleccionas la hoja y rango:
Sheets("BBDD").Range("A2:A" & fin).Select
Esta instrucción no da error cuando la hoja activa ya es BBDD, pero cuando se está ejecutando desde otra hoja hay que separarlas: primero seleccionar o activar la hoja y luego el rango:
Sheets("BBDD"). Activate Range("A2:A" & fin).Select
Fijate que hay otras secciones de código donde debieras también separalas.
PD) Te invito a mirar los videos 11 (mejoras en el código) y 9 (macros compartidas) de mi canal. No está mal tu programación, pero creo que podrías aligerar los códigos suprimiendo el Me y estableciendo las propiedades desde la tabla de propiedades y no por código. Una sugerencia ;)
Sdos.
Elsa
- Compartir respuesta
Debe de presenter tu macro
A lo major estas cargando datos desde la misma hoja y en tu macro al ver la hoja en blamco te da el error
Presentanos tu macro para así cer donde esta el error
Private Sub CommandButton1_Click() On Error GoTo Errores If Me.TextBox4.Value = "" Then MsgBox "SELECCIONA UN CLIENTE", vbExclamation, "SERVITEC" 'If Me.TextBox4.Value = "" Then Exit Sub Else MODIFICAR.Show Errores: End If 'MsgBox "No se encuentra.", vbExclamation, "SERVITEC" End Sub Private Sub CommandButton2_Click() Unload Me End Sub Private Sub CommandButton3_Click() NUEVOForm1.Show End Sub Private Sub CommandButton5_Click() Exportar_a_PDF_e_Imprimir End Sub Private Sub Label15_Click() End Sub Private Sub Label18_Click() End Sub Private Sub Label19_Click() End Sub Private Sub Label20_Click() End Sub Private Sub Label21_Click() End Sub Private Sub Label24_Click() End Sub Private Sub Label5_Click() End Sub Private Sub Label8_Click() End Sub Private Sub ListBox1_Click() Dim i As Long Dim dato As Integer On Error Resume Next For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then dato = ListBox1.List(i) Next i Sheets("BBDD").Cells(dato + 1, 1).Activate '*************** Me.TextBox4 = Me.ListBox1.List(Me.ListBox1.ListIndex, 1) Me.TextBox5 = Me.ListBox1.List(Me.ListBox1.ListIndex, 2) Me.TextBox6 = Me.ListBox1.List(Me.ListBox1.ListIndex, 3) Me.TextBox7 = Me.ListBox1.List(Me.ListBox1.ListIndex, 4) Me.TextBox8 = Me.ListBox1.List(Me.ListBox1.ListIndex, 5) Me.TextBox9 = Me.ListBox1.List(Me.ListBox1.ListIndex, 6) Me.TextBox10 = Me.ListBox1.List(Me.ListBox1.ListIndex, 7) Me.TextBox11 = Me.ListBox1.List(Me.ListBox1.ListIndex, 8) Me.TextBox12 = Me.ListBox1.List(Me.ListBox1.ListIndex, 9) Me.TextBox13 = Me.ListBox1.List(Me.ListBox1.ListIndex, 10) Me.TextBox14 = Me.ListBox1.List(Me.ListBox1.ListIndex, 11) Me.TextBox15 = Me.ListBox1.List(Me.ListBox1.ListIndex, 12) Me.TextBox16 = Me.ListBox1.List(Me.ListBox1.ListIndex, 13) Me.TextBox17 = Me.ListBox1.List(Me.ListBox1.ListIndex, 14) Me.TextBox18 = Me.ListBox1.List(Me.ListBox1.ListIndex, 15) Me.TextBox19 = Me.ListBox1.List(Me.ListBox1.ListIndex, 16) Me.TextBox20 = Me.ListBox1.List(Me.ListBox1.ListIndex, 17) Me.TextBox21 = Me.ListBox1.List(Me.ListBox1.ListIndex, 18) Me.TextBox22 = Me.ListBox1.List(Me.ListBox1.ListIndex, 19) Me.TextBox23 = Me.ListBox1.List(Me.ListBox1.ListIndex, 20) Me.TextBox24 = Me.ListBox1.List(Me.ListBox1.ListIndex, 21) On Error GoTo 0 End Sub Private Sub TextBox1_Change() 'Declaramos variables Dim fin As Long, i As Long, V As Long Dim sCadena_seccion As String 'Filtramos por ESTATUS With Sheets("BBDD") fin = Application.CountA(.Range("B:B")) If TextBox1 = "" Then Me.ListBox1.RowSource = ("A2:V") & Worksheets("BBDD").Range("A" & Rows.Count).End(xlUp).Row Exit Sub End If Me.TextBox2 = Clear Me.TextBox3 = Clear Me.ListBox1.RowSource = Clear For i = 2 To fin sCadena_seccion = .Cells(i, 3).Value If UCase(sCadena_seccion) Like "*" & UCase(TextBox1.Value) & "*" Then Me.ListBox1.AddItem Me.ListBox1.List(N, 0) = .Cells(i, 1).Value Me.ListBox1.List(N, 1) = .Cells(i, 2).Value Me.ListBox1.List(N, 2) = .Cells(i, 3).Value Me.ListBox1.List(N, 3) = .Cells(i, 4).Value Me.ListBox1.List(N, 4) = .Cells(i, 5).Value Me.ListBox1.List(N, 5) = .Cells(i, 6).Value Me.ListBox1.List(N, 6) = .Cells(i, 7).Value Me.ListBox1.List(N, 7) = .Cells(i, 8).Value Me.ListBox1.List(N, 8) = .Cells(i, 9).Value Me.ListBox1.List(N, 9) = .Cells(i, 10).Value N = N + 1 End If Next Me.ListBox1.ColumnWidths = "35pt;50pt;65pt;50pt;80pt;120pt;90pt;90pt;90pt" End With End Sub Private Sub TextBox10_Change() End Sub Private Sub TextBox11_Change() End Sub Private Sub TextBox12_Change() End Sub Private Sub TextBox13_Change() End Sub Private Sub TextBox14_Change() End Sub Private Sub TextBox15_Change() End Sub Private Sub TextBox16_Change() End Sub Private Sub TextBox17_Change() End Sub Private Sub TextBox18_Change() End Sub Private Sub TextBox2_Change() Dim fin As Long, i As Long, V As Long Dim sCadena_seccion As String, sCadena_estudios As String 'Una vez filtrados los datos por ESTATUS, filtramos por nombre With Sheets("BBDD") fin = Application.CountA(.Range("B:B")) If TextBox2 = "" Then Me.ListBox1.RowSource = ("A2:V") & Worksheets("BBDD").Range("A" & Rows.Count).End(xlUp).Row Exit Sub End If Me.ListBox1 = Clear Me.ListBox1.RowSource = Clear For i = 2 To fin sCadena_seccion = .Cells(i, 3).Value sCadena_estudios = .Cells(i, 7).Value If UCase(sCadena_seccion) Like "*" & UCase(TextBox1.Value) & "*" And _ UCase(sCadena_estudios) Like "*" & UCase(TextBox2.Value) & "*" Then Me.ListBox1.AddItem Me.ListBox1.List(N, 0) = .Cells(i, 1).Value Me.ListBox1.List(N, 1) = .Cells(i, 2).Value Me.ListBox1.List(N, 2) = .Cells(i, 3).Value Me.ListBox1.List(N, 3) = .Cells(i, 4).Value Me.ListBox1.List(N, 4) = .Cells(i, 5).Value Me.ListBox1.List(N, 5) = .Cells(i, 6).Value Me.ListBox1.List(N, 6) = .Cells(i, 7).Value Me.ListBox1.List(N, 7) = .Cells(i, 8).Value Me.ListBox1.List(N, 8) = .Cells(i, 9).Value Me.ListBox1.List(N, 9) = .Cells(i, 10).Value N = N + 1 End If Next Me.ListBox1.ColumnWidths = "35pt;50pt;65pt;50pt;80pt;120pt;90pt;90pt;90pt" End With End Sub Private Sub TextBox24_Change() End Sub Private Sub TextBox3_Change() Dim fin As Long, i As Long, V As Long Dim sCadena_seccion As String, sCadena_estudios As String, sCadena_idioma As String 'una vez filtrada la información por estatus y nombre se filtra por servicio fin = Application.CountA(.Range("B:B")) If TextBox3 = "" Then Me.ListBox1.RowSource = ("A2:V") & Worksheets("BBDD").Range("A" & Rows.Count).End(xlUp).Row Exit Sub End If Me.ListBox1 = Clear Me.ListBox1.RowSource = Clear For i = 2 To fin sCadena_seccion = .Cells(i, 3).Value sCadena_estudios = .Cells(i, 7).Value sCadena_idioma = .Cells(i, 6).Value If UCase(sCadena_seccion) Like "*" & UCase(TextBox1.Value) & "*" And _ UCase(sCadena_estudios) Like "*" & UCase(TextBox2.Value) & "*" And _ UCase(sCadena_idioma) Like "*" & UCase(TextBox3.Value) & "*" Then Me.ListBox1.AddItem Me.ListBox1.List(N, 0) = .Cells(i, 1).Value Me.ListBox1.List(N, 1) = .Cells(i, 2).Value Me.ListBox1.List(N, 2) = .Cells(i, 3).Value Me.ListBox1.List(N, 3) = .Cells(i, 4).Value Me.ListBox1.List(N, 4) = .Cells(i, 5).Value Me.ListBox1.List(N, 5) = .Cells(i, 6).Value Me.ListBox1.List(N, 6) = .Cells(i, 7).Value Me.ListBox1.List(N, 7) = .Cells(i, 8).Value Me.ListBox1.List(N, 8) = .Cells(i, 9).Value Me.ListBox1.List(N, 9) = .Cells(i, 10).Value N = N + 1 End If Next Me.ListBox1.ColumnWidths = "35pt;50pt;65pt;50pt;80pt;120pt;90pt;90pt;90pt" End With End Sub 'Private Sub TextBox6_Change() 'TextBox6 = Format(TextBox6, "MM/DD/YYYY") 'TextBox6 = Format(TextBox6, «dd «»de»» mmmm «»de»» yyyy») 'TextBox6 = Format(TextBox6, «yyyy / mm / dd») 'End Sub Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim tmp On Error GoTo err_format TextBox6 = Format(CDate(TextBox6), "dd/mm/yyyy") Exit Sub err_format: Err.Clear: Cancel = True End Sub Private Sub TextBox9_Change() End Sub Private Sub UserForm_Initialize() Dim i As Long, fin As Long, Mirango() As Integer 'Borramos ID's e inicializamos de nuevo. 'Los ID deben ser consecutivos a partir de 1 fin = Application.CountA(Sheets("BBDD").Range("B:B")) Sheets("BBDD").Range("A2:A" & fin).Select Selection.Clear ReDim Mirango(1 To fin) For i = 1 To fin: Mirango(i) = i Next i Worksheets("BBDD").Range("A2:A" & UBound(Mirango)).Value = _ Application.WorksheetFunction.Transpose(Mirango) Worksheets("BBDD").Range("A1").Select 'Indicamos el número de columnas que tendrá el listbox Me.ListBox1.ColumnCount = 10 'Definimos tamaño de los espacios Me.ListBox1.ColumnWidths = "35pt;50pt;65pt;50pt;80pt;120pt;90pt;90pt;90pt" 'Cargamos listbox Me.ListBox1.RowSource = ("A2:V") & Worksheets("BBDD").Range("A" & Rows.Count).End(xlUp).Row End Sub
esta es la macro del formulario y en un modulo tengo
Sub MOSTRAR()
FORMULARIO.Show
End Sub
El botón estando en la misma hoja de la bd funciona perfecto pero lo pongo en otra y no
Espero su respuesta mil gracias por su interés
- Compartir respuesta