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

Respuesta
1

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

Muchísimas ¡Gracias! Elsa ya funciona. Ala perfección 

Bien, entonces no olvides valorar las respuestas (con Excelente o Buena) para darlas por cerrada.

Sdos!

Respuesta
1

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas