Error 1004 en tiempo de ejecución. Error definido por la aplicación o el objecto

Me surge un error el cual especifico en el titulo

Esto sucede cuando inicio el form en la hoja inicial donde tengo todos botones para iniciar los forms, Desde la hoja inicial, abro el form, selecciono de un Combo la hoja a la cual voy a trabajar(editar o ingresar articulo, se carga el ListBox, selecciono(Click) en el artículo que me interesa editar.

Después de editado piso el botón del evento para Validar la edición y me salta esta imagen

En esta línea         Set b = .Range("A2:A50000").Find(lista.Value, lookat:=xlWhole, LookIn:=xlValues)

De esta macro (reparen que el evento es el evento Click del ListBox, ni sequier el de Validación

Private Sub lista_Click()
    Dim v   As Variant
    Dim txt As MSForms.TextBox
    Dim i%
    Set ws = ActiveSheet
    With ws
        Set b = .Range("A2:A50000").Find(lista.Value, lookat:=xlWhole, LookIn:=xlValues)
        If Not b Is Nothing Then
            v = Array(txtCod, txtProd, txtProve, txtFactu, DTPicker1, txtUbic, txtObser)
            For i = 0 To UBound(v)
                If i = 4 Then
                    DTPicker1 = .Cells(b.Row, i + 1)
                Else
                    Set txt = v(i)
                    txt.Text = .Cells(b.Row, i + 1)
                    Set txt = Nothing
                End If
            Next
        End If
    End With
    Buscar.SetFocus
End Sub
  • He buscado por la WEB en cualquier cantidad de paginas pero d ninguna he sacado conclusión, por falta de conocimiento

    Si abro el formulario directamente desde la hoja en que voy a trabajar, todo marcha bien, esto pasa cuando abro el form desde la hoja inicial

1 Respuesta

Respuesta
4

Seguramente la hoja activa no es la que estás necesitando trabajar.

Colocá esta línea justo antes de la que te marca error para verificar cuál es la hoja activa.

Msgbox ActiveSheet.name

Luego sigue:  Set b = ......

Si no estás en la hoja que necesitas debes declarar la variable:

Set ws = sheets("mi_Hoja")      'aquí coloca el nombre de la hoja donde se hará la búsqueda.

Si es la hoja correcta donde debe realizar la búsqueda habrá que mirar otros detalles... para eso mejor enviame el libro a mi correo para revisar la macro.

Voy a enviartelo

Probé.  Quiero mencionarte que algo pasa y creo que todo es por la selección de hoja en el combo, ¿Por qué lo digo?.

Al proceder, sea ingresar nuevo articulo sea editar, después que procedo, la edición no aparece en hoja ni en ListBox. Cierro UF y cierro aplicación (Excel) y no cierra, tengo que cambiar de hoja y ugo si puedo cerrar aplicación, que será?  Te pido tu tiempo y desde ya te agradezco tu empeño

Abro form, Selecciono hoja, edito un articulo, y luego de editado piso Boton Validar Edición, me sale esto y luego la ultima imagen

Respondo a la consulta inicial. Ya sabes que a nuevos temas corresponden nuevas consultas.

Tal como te respondí al inicio, la instrucción Set ws = ActiveSheet debe ser modificada para indicarle cuál es tu hoja de trabajo.

Esto sucede también ni bien inicias el UF de Productos, que se llama desde la hoja Inicio y en ningún momento activas otra hoja antes de llegar a esta subrutina (sugiero no utilizar 'eventos de controles' como Change en el nombre de alguna subrutina como en este caso).

Sub buscar_Change()
    Application.ScreenUpdating = False
    MsgBox ActiveSheet.Name
    Set ws = ActiveSheet

Coloca provisoriamente esa línea con el Msgbox para verificar si estás en la hoja correcta. 

Luego la quitas y modificas la línea con Set ws = Sheets("Productos") o la que corresponda.

O bien puedes activar la hoja requerida y así dejar la línea del Set sin cambios:

Sub buscar_Change()
    Application.ScreenUpdating = False
    Sheets("Productos").select
    Set ws = ActiveSheet

Debes hacer esto en todos tus procesos porque evidentemente allí están los problemas.

No puedo decirle que vaia a la hoja "Productos" porque ¿y cuando no voy a Productos y si a Silverado? Modifico "en la macro "Productos" por "Silverado"? eso lo hacia antes de tener el combo para seleccionar la hoja.

omo haria para pasar a otra hoja que no fuera "Productos?

Hice eso, coloque la línea en los procesos, pero probando me sigue el mismo error al editar o ingresar nuevo

A ver si con estas aclaraciones e imagen me comprendes la idea:

Desde la hoja Inicio llamas al UF. Primero se ejecuta el evento Initialize ... y éste ejecuta la subrutina BuscaCambio ... que a su vez ejecuta la subrutina buscar_Change.

Allí el mensaje marcado me dice que estoy en la hoja Inicio... y le asigno a la variable 'ws'

Luego intento copiar un rango de esa hoja (Inicio) a la hoja Filtro... y aquí surgen 3 problemas:

- La hoja ws no tiene datos (es la portada). Debes colocar el nombre de la hoja que tiene los datos para pasar a hoja Filtro.

- La hoja Filtro no existe en el libro.

- No debiera ejecutarse áún esta parte del proceso (en el evento Initialize) ya que aún no se seleccionó la hoja desde el desplegable.

Una vez que arregles estos detalles (en todos los formularios) probalo todo nuevamente y si aún siguen los fallos podrás dejar nuevas consultas.

Sdos!

Por tal razón, el form nada presentaal iniciarse en la hoja Inicio

La hoja Filtro, es creada al iniciar el libro evento Open

En inicio nada existe

- La hoja ws no tiene datos (es la portada). Debes colocar el nombre de la hoja que tiene los datos para pasar a hoja Filtro.

¿Y qué sucede cuando selecciono una hoja en el combo? Paso a esa hoja que posee datos y los pasa a la hoja filtro que fue creada al iniciar la aplicación Workbook_Open() y que esta oculta

    For Each h In Sheets
        If h.Name = "Filtro" Then
            existe = True
            Exit For
        End If
    Next
    If existe = False Then
    On Error Resume Next
        Sheets.Add(After:=Sheets(Sheets.Count)).Name = "Filtro"
        If Err.Number > 0 Then Sheets("FILTRO").Select
    On Error GoTo 0
        ActiveSheet.Visible = 0
    End If

Partes de esta macro estaban desactivadas, ¿porque? no se decir

- No debiera ejecutarse aun esta parte del proceso (en el evento Initialize) ya que aún no se seleccionó la hoja desde el desplegable.

Aquí me dejas en la luna, porque esta el desplegable para hacer lo indicado

Es solo en este form que sucede el problema.

Pues Elsa, si se complica dejare la cosa como estaba, y botón en cada hoja y listo, eliminando el desplegable y su código

Si con esta misma línea seleccionas la colocas en evento Change del desplegable, te dirá en la hoja que te encuentras, eso lo probé

Aquí me dejas en la luna, porque esta el desplegable para hacer lo indicado

Si, está el desplegable. Pero al abrir el UF aún no hay nada seleccionado en ese desplegable y por lo tanto sigues en la hoja Inicio. Intento que no ejecutes aquí el proceso que marco en negrita.

Private Sub UserForm_Initialize()
With cboHojas
.List = Array("PRODUCTOS", "CAT", "JOHN DEERE", "SILVERADO", "INTERNACIONAL")
End With
DTPicker1 = (Date)
FiltrarPor.List = Array("COD PRODUCTO", "NOMBRE PRODUCTO", "UBICACION")

'Call BuscaCambio 'no ejecutar aquí este proceso porque aún se está en hoja Inicio
End Sub

Sdos!

Si, está el desplegable. Pero al abrir el UF aún no hay nada seleccionado en ese desplegable y por lo tanto sigues en la hoja Inicio. Intento que no ejecutes aquí el proceso que marco en negrita

Entendido Elsa

Entonces quitarlo d ahí

Private Sub UserForm_Initialize()
    With cboHojas
        .List = Array("PRODUCTOS", "CAT", "JOHN DEERE", "SILVERADO", "INTERNACIONAL")
    End With
    DTPicker1 = (Date)
    FiltrarPor.List = Array("COD PRODUCTO", "NOMBRE PRODUCTO", "UBICACION")
    ''''Call BuscaCambio
End Sub

y tenerlo en el eveto changedespues de la seleccion de hoja?

Me funciono, el error no aparaece. Necesito seguir probando a ver que tal me vá.

Explico algo:

Abro el UF en portada Inicio > selecciono hoja, se va hacia la seleccionada en desplegable colocandola Activa(Select) > Selecciono articulo en ListBox y se llenan las cajas de texto > EDITO > piso botón Validar Edición > Ya el error no aparece > Cierro UF > Salgo de la aplicacion

y no me funciona salir (cerrar aplicacion (Excel)) tal como lo hacia anteriormente. tengo que cambiar de hoja para poder salir de la aplicacion. ¿Que hice?

En el boton de cerrar UF, le coloque Inicio.Select. Ya al hacer este cambio de hoja en trabajo a hoja Inicio, si puedo cerrar aplicacion, cerrar Excel.  ¿Que otra cosa puedo hacer? que no sea esta, Inicio.Select. 

Cierro UF > Salgo de la aplicación

El botón de cierre del Uf no tiene nada en especial más que limpiar la hoja Filtro.

Private Sub cbtCerrar_Click()
Unload Me
Sheets("Filtro"). Cells. Clear
End Sub

Tampoco hay instrucciones en el evento de cierre del UF (QueryClose) por lo que al cerrarlo por ejemplo desde la hoja Silverado se quedó en esa hoja.

Y no me funciona salir (cerrar aplicación (Excel)) tal como lo hacia anteriormente. Tengo que cambiar de hoja para poder salir de la aplicación.

Lo que comentas aquí no tiene ningún sentido además que acabo de salir desde la hoja Silverado correctamente. Quizás cambiaste instrucciones en el evento BeforeClose ... porque así como está en tu libro que tengo de muestra sale sin inconvenientes desde cualquier hoja.

Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Cierra libro desde cualquier hoja
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Filtro").Delete
    ActiveWorkbook.Save  
End Sub

Por lo tanto revisa tu código porque lo probé  y no hay nada para modificar.

Y doy por cerrada esta consulta.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas