............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Error 1004 en código de Userform.

Ver el tema anterior Ver el tema siguiente Ir abajo

Error 1004 en código de Userform.

Mensaje por davidsagal el Sáb Mar 21, 2015 12:18 pm

Hola a todos. Tengo un Userform llamado "frmRegistroperarios". En él, hago llamada a dos Public Function insertada cada una en un módulo diferente. A ambas Funciones les paso parametros por valor. Hasta aquí, todo bien. El problema es en Private Registraroper_Click() del Userform. Aqui me da error (1004) cuando llego a la parte de pasar los datos a mi Hoja de excel ("Operarios"). Les pongo el código por si ven donde está el problema.

Código:

Private Sub btn_Registraoper_Click()
    Dim Fila As Integer
    Dim Final As Integer
    Dim Registro As Integer
    Dim Titulo As String
    Dim xNumcod As Integer
    Dim xHoja As Worksheet 'Modificado de prueba el 21-03-15
    
    Set xHoja = ActiveWorkbook.Sheets("Operarios")
    xNumcod = Val(Me.txtNumregoperario.Text)
    
    Titulo = "Registra Operario"
    
    If Me.txtNumregoperario.Text = "" Then
        Me.txtNumregoperario.BackColor = &HC0C0FF
        MsgBox "Ingrese Numero de registro del operario", , Titulo
        Me.txtNumregoperario.SetFocus
        Exit Sub
    
        ElseIf Me.txtNomoperario = "" Then
            Me.txtNomoperario.BackColor = &HC0C0FF
            MsgBox "Ingrese Nombre de Operario", , Titulo
            Me.txtNomoperario.SetFocus
            Exit Sub
    
            ElseIf Me.txtEquipoperario = "" Then
                Me.txtEquipoperario.BackColor = &HC0C0FF
                MsgBox "Ingrese Equipo del operario", , Titulo
                Me.txtEquipoperario.SetFocus
                Exit Sub
    
    End If
    
    
        existe = Data_Check(xNumcod, xHoja)
        
        If (existe) Then
        
            If MsgBox("Atención, Numero de registro " & Me.txtNumregoperario & " ya existe" + Chr(13) + "¿Desea proceder?", _
                    vbYesNo) = vbNo Then
                    
                        LimpiaControles
                    
                    Exit Sub
                    
            Else 'Sino Existe, entonces Nos situamos al Final de la tabla para uno nuevo
        
        
        
                'Determina el Final de la tabla_operarios de la hoja7(Operarios)
                 Final = GetUltimoR(xHoja)
        
        
        
        
               'Envía los datos a la Hoja7(Operarios)
                'Me.txtNumregoperario.BackColor = &HFFFFFF
                xHoja.Cells(Fila, 1).Value = Val(Me.txtNumregoperario.Text) <<<----------------AQUI EMPIZA A DARME EL ERROR 1004
                xHoja.Cells(Fila, 2) = UCase(Me.txtNomoperario)
                xHoja.Cells(Fila, 3) = UCase(Me.txtEquipoperario)
                xHoja.Cells(Fila, 4) = Hoja2.Range("G1") 'Usuario responsable de la operación
        
                    'Limpia los controles
                        LimpiaControles
                
                Unload Me
                MsgBox "Operario procesado con éxito", vbInformation, Titulo
        
           End If
        
        Else 'Sino Existe y queremos proceder...
                If MsgBox("¿Son correctos los datos?" + Chr(13) + "¿Desea proceder?", vbOKCancel) = vbOK Then
                
                       'Determina el Final de la tabla_operarios de la hoja7(Operarios)
                        Final = GetUltimoR(xHoja)

                            'Envía los datos a la Hoja7(Operarios)
                            Me.txtNumregoperario.BackColor = &HFFFFFF
                            xHoja.Cells(Fila, 1) = Val(Me.txtNumregoperario.Text) <<<----------------AQUI EMPIZA A DARME EL ERROR 1004
                            xHoja.Cells(Fila, 2) = UCase(Me.txtNomoperario)
                            xHoja.Cells(Fila, 3) = UCase(Me.txtEquipoperario)
                            xHoja.Cells(Fila, 4) = Hoja2.Range("G1") 'Usuario responsable de la operación
                
                            'Limpia los controles
                                LimpiaControles
                            
                            Unload Me
                            MsgBox "Operario procesado con éxito", vbInformation, Titulo
                Else
                
                        Exit Sub
                End If
        End If
End Sub

 


Public Function Data_Check(ByVal nNumcod As Integer, ByVal Hoja As Worksheet) As Boolean
Dim Fila As Integer
Dim Numcodbus As Integer
Dim Encontrado As Boolean
Dim Hojabus As Worksheet

Numcodbus = nNumcod
Encontrado = False
Fila = 2


   Do While Hoja.Cells(Fila, 1) <> "" And Hoja.Cells(Fila, 1) <> Numcodbus 'Modificado de prueba, el 21-03-15
           Fila = Fila + 1
   Loop
       
       If Hoja.Cells(Fila, 1) = Numcodbus Then 'Modificado de prueba, el 21-03-15
           Encontrado = True
       End If
       
   Data_Check = Encontrado

End Function


Public Function Data_Check(ByVal nNumcod As Integer, ByVal Hoja As Worksheet) As Boolean
Dim Fila As Integer
Dim Numcodbus As Integer
Dim Encontrado As Boolean
Dim Hojabus As Worksheet

Numcodbus = nNumcod
Encontrado = False
Fila = 2


   Do While Hoja.Cells(Fila, 1) <> "" And Hoja.Cells(Fila, 1) <> Numcodbus 'Modificado de prueba, el 21-03-15
           Fila = Fila + 1
   Loop
       
       If Hoja.Cells(Fila, 1) = Numcodbus Then 'Modificado de prueba, el 21-03-15
           Encontrado = True
       End If
       
   Data_Check = Encontrado

End Function

davidsagal

Masculino Cantidad de envíos : 19
Edad : 39
Ciudad - Pais : ESPAÑA
Version de Excel : 2010
Fecha de inscripción : 05/01/2011

Volver arriba Ir abajo

Re: Error 1004 en código de Userform.

Mensaje por moises melgar el Sáb Mar 21, 2015 10:36 pm

Buenas noches

Una rapida observacion:
VBA al ejecutar codigo Va de linea de codigo en linea de codigo
con base a esto miramos los sig
empieza con

Código:
Private Sub btn_Registraoper_Click()
Dim Fila As Integer
codigo...
Set xHoja = ActiveWorkbook.Sheets("Operarios")
codigo...
codigo..
xHoja.Cells(Fila, 1).Value = Val(Me.txtNumregoperario.Text)  <---empieza el error

¿Cuanto vale fila?
xHoja.Cells(Fila, 1).Value

en "Public Function" a fila le colocas un valor inicial de 2 por lo que corre correctamente
pero en btn_Registraoper_Click no existe ese valor

Recomendacion:

Presiento que quieres el numero de fila correspondiente a la ultima celda vacia de la columna A de la hoja "Operarios"
entonces abajito de
Set xHoja = ActiveWorkbook.Sheets("Operarios")

le colocas :

Código:
fila = ActiveWorkbook.Sheets("Operarios").Range("A" & Rows.Count).End(xlUp).Row + 1
en español:

ActiveWorkbook.Sheets("Operarios").Range("A" & Rows.Count)
del libro activo de la hoja llamada "Operarios" de la celda (A y el numero de filas existentes en el libro) <---Esto coloca el valor como la ultima celda de la columna A en mi caso "A1048576"
luego sigue .End(xlUp)  es el equivalente en excel de presionar ctrl + tecla direccional arriba  <--como ya ando en la ultima celda de columna esto me manda al ultimo valor con datos de la columan A, si tuviera un valor en A34 esta seccion me daria como resultado "A34"
finalizo con .row <------me dice en que fila ando, continuando con el ejemplo seria "34" (del A34)
al poner +1 fila adquiere el valor de la ultima fila vacia de la columna "A" resultado  = 35

Intente hacerla una explicacion rapida y algo detallada ojala esto arregle tu detalle

saludos

moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 512
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Error 1004 en código de Userform.

Mensaje por davidsagal el Dom Mar 22, 2015 7:20 am

Claro. Anoche estuve revisándolo linea a linea y el fallo esta cuando igualo Fila=GetUltimoR(xHoja). Debía de haber igualado Fila=GetNuevoR(xHoja). Así Sí que funciona. De todos modos, cuando puse el código, para que me aconsejaran, duplique la Función Data_Check(), cuando lo que pretendía era incorporar las dos Funciones. Luego la pondré para que la vean. De todos modos ya lo he solucionado. Se lo agradezco.
No obstante, no tengo claro como utilizar en mi código las Funciones Val() y Trim(). Si pudieran explicármelo, creo que ayudaría a hacer mi código más eficiente.
Gracias.

davidsagal

Masculino Cantidad de envíos : 19
Edad : 39
Ciudad - Pais : ESPAÑA
Version de Excel : 2010
Fecha de inscripción : 05/01/2011

Volver arriba Ir abajo

Re: Error 1004 en código de Userform.

Mensaje por davidsagal el Lun Mar 23, 2015 6:30 am

Esta es la otra función que faltaba. Perdón por duplicar la anterior.
Código:
Public Function GetUltimoR(hoja As Worksheet) As Integer
    GetUltimoR = GetNuevoR(hoja) - 1
End Function


Public Function GetNuevoR(hoja As Worksheet) As Integer
    Dim Fila As Integer
    Fila = 2
   
    Do While hoja.Cells(Fila, 1) <> ""
        Fila = Fila + 1
    Loop
   
        GetNuevoR = Fila
End Function

Por lo tanto, en el Código principal Private Sub btn_Registraoper_click(), la linea que dice Final = GetNuevoR(xHoja) debía de decir:
Fila= GetNuevoR(xHoja). Aquí estaba el Fallo.

davidsagal

Masculino Cantidad de envíos : 19
Edad : 39
Ciudad - Pais : ESPAÑA
Version de Excel : 2010
Fecha de inscripción : 05/01/2011

Volver arriba Ir abajo

Re: Error 1004 en código de Userform.

Mensaje por moises melgar el Lun Mar 23, 2015 2:50 pm

El valor de fila correcto¡¡¡¡

moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 512
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Error 1004 en código de Userform.

Mensaje por davidsagal el Lun Mar 23, 2015 5:26 pm

Eso es Moisés. Un despiste de Novatoooo.
Se podría optimizar, aún más, este código?
Gracias a todos y un saludo.

davidsagal

Masculino Cantidad de envíos : 19
Edad : 39
Ciudad - Pais : ESPAÑA
Version de Excel : 2010
Fecha de inscripción : 05/01/2011

Volver arriba Ir abajo

Re: Error 1004 en código de Userform.

Mensaje por Contenido patrocinado Hoy a las 3:13 pm


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.