Saltar al contenido

error '1004' en tiempo de ejecucion


Recommended Posts

publicado

buenas tardes jovenes tengo un problemita con una macho que estoy ejecutando y me da un error '1004' en tiempo de ejecucion, me pueden decir por favor como lo soluciono, le explico que esta macro es para buscar las diferentes combinaciones exixtentes de 6 codigos en un rango del 1 al 38.

este es el codigo que estoy utilizando lo que esta en negrita es en donde me esta dando el error.

espero me puedan ayudar.

Gracias

Private Sub CommandButton1_Click()

Dim nn As Long, mm As Integer, rElem As Long, kk As Long, r_Comb As Long

Dim myMat(), Elem, piv() As Long

nn = Cells(Rows.Count, "B").End(xlUp).Row

If WorksheetFunction.CountA([b:b]) <> nn Then

MsgBox "La columna B no puede tener celdas vacías."

Exit Sub

End If

If nn = 1 Then

MsgBox "Introduzca los elementos a combinar" & Chr(10) & "en la columna B."

Exit Sub

End If

If [c2] <= 0 Or (Int([c2]) <> [c2]) Then

[c2].Select

MsgBox "Introduzca un Nº válido de elementos en cada combinación."

Exit Sub

End If

nn = nn - 1: mm = [c2]

If mm > nn Then

[c2].Select

MsgBox "El Nº de elementos en cada combinación no puede ser" & _

Chr(10) & "mayor que el Nº de elementos totales."

Exit Sub

End If

[c4].Formula = "= COMBIN( COUNTA(b:B) - 1, c2 )"

If [c4] > Rows.Count - 1 Then

MsgBox "El Nº de combinaciones es mayor que el Nº de filas disponibles"

Exit Sub

End If

Application.ScreenUpdating = False

Range([e1], [e1].SpecialCells(xlLastCell).Offset(2, 2)).EntireColumn.Delete

ReDim myMat(1 To [c4], 1 To mm)

Elem = [b2].Resize(nn)

ReDim piv(1 To mm)

rElem = 1: piv(1) = 1

Do

For kk = 1 + rElem To mm: piv(kk) = piv(rElem) + kk - rElem: Next kk

Do While piv(mm) <= nn

r_Comb = r_Comb + 1

For kk = 1 To mm: myMat(r_Comb, kk) = Elem(piv(kk), 1): Next kk

piv(mm) = 1 + piv(mm)

Loop

rElem = mm

Do

rElem = rElem - 1: If rElem = 0 Then GoTo Fin

piv(rElem) = 1 + piv(rElem)

Loop Until piv(rElem) <= nn - mm + rElem

Loop

Fin:

[e2].Resize([c4], mm) = myMat

ReDim myMat(1 To 1)

[e2].Offset(, mm).ColumnWidth = 10: [e2].Resize([c4], mm).EntireColumn.AutoFit

Application.ScreenUpdating = True

End Sub

Invitado Cacho R
publicado

Hola! Alberto

El por qué de tu error lo vas a encontrar en el siguiente enlace:

--> Combinaciones sin Repetición (código original de autor muy conocido).

Sólo te ruego que no te unas a la moda que se ve en otros Foros de Excel, en los que se utilizan códigos de autores muy conocidos y que son "autoadjudicados" por quienes se quieren lucir con ideas que no les son propias, sin reconocer los méritos del autor original (por ellos conocido).

Cualquier duda/consulta: ¡Pregunta, nomás!...

  • 2 weeks later...
publicado

gracias cacho, disculpa por lo del código estaba buscando como un ejemplo de como hacer esa macro, hasta el momento estoy aprendiendo hacerlas y solo me fijo en los códigos de las macros que necesito para saber como hacer esa y cualquier otra que se me presente, te prometo que la próxima ves la pregunta sera de una de mi propia creación, con dios delante.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.