Error 1004 en tiempo de ejecución error definido por la aplicación o el objeto

No encuentro el error de acuerdo al código para comenzar en la fila 31 lo hace sin problemas pero a la hora de cerrar el formulario y abrirlo de n huevo con los datos insertados genera el error toca borrar y comenzar de la fila 31 de nuevo y ese no es el caso es para que queden insertados como una base de datos gracias...

Dim lr As Long, i As Long, fin As Long, cont As Long, n As Long
Dim pre As String
'
'Validaciones
If ComboBox1 = "" Or ComboBox1.ListIndex = -1 Then
MsgBox ("Se requiere que seleccione un nombre para insertar un codigo"), vbCritical, "AVISO"
ComboBox1.SetFocus
Exit Sub
End If
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
'
'Proceso
lr = Range("A" & Rows.Count).End(3).Row + 2
a = Range("A31:A" & lr)
Select Case lr
Case Is < 31: fin = 0
Case 31: fin = 1
Case Else: fin = UBound(a)
End Select
n = 1
pre = Split(ComboBox1.Value, "-")(0)
For i = 1 To fin
If Left(a(i, 1), Len(pre)) = pre Then
n = n + 1
End If
Next
'
'Salida
Application.ScreenUpdating = False
Range("A31").EntireRow.Insert
Range("A31").Value = pre & "-" & Format(n, "000")
Range("B31").Value = Me.txtpro.Value
Range("C31").Value = Me.txttipopro.Value
Range("D31").Value = Me.txtprove.Value
Range("E31").Value = Me.txtprecio1.Value
Range("F31").Value = Me.txtprecio2.Value
Application.ScreenUpdating = True

'Range("A31").EntireRow.Insert
' 'Range("A31").Value = Me.ComboBox1.Value
' Range("B31").Value = Me.txtpro.Value
' Range("C31").Value = Me.txttipopro.Value
' Range("D31").Value = Me.txtprove.Value
' Range("E31").Value = Me.txtprecio1.Value
' Range("F31").Value = Me.txtprecio2.Value

2 respuestas

Respuesta
2

Leyendo el código del evento Initialize, veo que tenés un error en la primer instrucción:

Private Sub userform_initialize()

a = Sheets("Hoja11").Range("A2:K" & Sheets("Hoja11").Range("A" & Rows.Count).End(3)).Value

Para establecer un rango sería:

a = Sheets("Hoja11").Range("A2:K" & Sheets("Hoja11").Range("A" & Rows.Count).End(3).Row)

Para el contenido de ese rango sería:

a = Sheets("Hoja11").Range("A2:K" & Sheets("Hoja11").Range("A" & Rows.Count).End(3).Row).Value

Sdos y no olvides valorar esta respuesta también, si te resuelve esta consulta puntual.

Respuesta
1

¿En cuál línea de la macro se detiene?

¿Algo más que le hayas hecho a la hoja?

Lo mejor es insertar después de la última fila con datos. Y no insertar en la fila 31 cada registro

¿En cuál línea de la macro se detiene?   

Private Sub userform_initialize()

a = Sheets("Hoja11").Range("A2:K" & Sheets("Hoja11").Range("A" & Rows.Count).End(3)).Value
listcargaproductos.ColumnCount = UBound(a, 2)

End Sub......


¿Algo más que le hayas hecho a la hoja?  !no¡

 Lo mejor es insertar después de la última fila con datos. Y no insertar en la fila 31 cada registro....los registros en realidad se insertaran en la fila "A2"

no se si sea mejor insertar datos con estas líneas de código comenzando desde A2 ,,,,lo de la fila A31 era como ejemplo para aho0ndar mas los conocimientos y ya había hecho este código pero el error no me deja avanzar  gracias.......

Dim lr As Long, i As Long, fin As Long, cont As Long, n As Long
Dim pre As String
'
'Validaciones
If ComboBox1 = "" Or ComboBox1.ListIndex = -1 Then
MsgBox ("Se requiere que seleccione un nombre para insertar un codigo"), vbCritical, "AVISO"
ComboBox1.SetFocus
Exit Sub
End If
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
'Range (Range("A & ActiveCell.Row), Range (1 & ActiveCell.Row).End(xlToLeft)).Select
'Proceso
lr = Range("A" & Rows.Count).End(3).Row + 2
'a = Range("A" & lr)
a = Range("A31:A" & lr)
Select Case lr
Case Is < 31: fin = 0
Case 31: fin = 1
Case Else: fin = UBound(a)
End Select
n = 1
pre = Split(ComboBox1.Value, "-")(0)
For i = 1 To fin
If Left(a(i, 1), Len(pre)) = pre Then
n = n + 1
End If
Next
Dim X As Integer
'Recoge variable de número de datos
X = WorksheetFunction.CountA(Range("A2:A10000"))
'Da de alta cada campo ya que tdos los txt estan rellenos
'Variable X solo por mayor comodidad al escribir código
X = X + 2 'X recoge el valor del número de asientos más el número de línea
'donde empiezan
'Alta artículo
Cells(X, 1) = ComboBox1.Text
Cells(X, 2) = txtpro.Text
Cells(X, 3) = txttipopro.Text
Cells(X, 4) = txtprove.Text
Cells(X, 5) = txtprecio1.Text
Cells(X, 6) = txtprecio2.Text

Sigo sin ver en cuál línea tienes el error.

NOTA: Para insertar código en este foro, utiliza el icono especial para Insertar Código Fuente.


Tienes que cambiar varias cosas si la línea inicial es la 2 en lugar de la 31.

Pero insisto, no utilices esa práctica para insertar un nuevo registro, es muy complicado y el proceso es muy lento.

Mejor busca la última fila con datos, la siguiente fila con datos es una fila disponible, entonces en esa fila disponible insertar los datos.

Revisa mis respuestas y observa que el código lo pongo en el foro utilizando el icono para Insertar Código Fuente, ejemplo:

Sub macro_prueba( )
   msgbox "Hola"
End Sub

Tú estas insertando el código directamente en el foro, así:

Sub macro_prueba()

   msgbox "hola"

end sub

¿Ves la diferencia?

Aquí encuentras el icono:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas