Necesito ayuda de kl

31/05/2005 - 14:59 por Max | Informe spam
Disculpa nuevamente he tratado de enviarte la hoja que hice con el macro que
me has enviado a esta direccion NOSPAMlapink2000@PLEASEhotmail.com pero me la
ha rechazado varias veces.He hecho todo como dijiste pero al llegar a
presionar Ctrl + F8 no ocurre nada y por lo tanto no se donde hacer
doble-clic sobre "ListPermutationsOrCombinations". La verdad es que no se que
hacer. Te agradeceria si me dieras una direccion donde enviar la hoja. O si
me puedes explicar que hago de mal.
Sinceramente gracias . Max

"KL" escribió:


Hola Max,

Prueba el siguiente macro publicado por Myrna Larson. Lo tienes que
depositar en un modulo VBA. Para ello:

1) haz clic-derecho sobre el nombre de cualquier hoja en una de las pestañas
de la parte de abajo de la ventana de Excel.
2) Elige la opcion Ver Codigo para abrir el editor VBA.
3) Una vez en el Editor VBA, ve al menu Insertar>Modulo
4) En la ventana mas grande a la derecha pega el codigo que te pongo a
continuacion.

5) Ahora en la hoja activa pon lo siguiente:

celda [A1]= C
celda [A2]= 3
celda [A3]= 1
celda [A4]= 2
celda [A5]= 3
celda [A...]= ...
celda [A9]= 7

6) Pulsa Ctrl+F8
7) Haz doble-clic sobre "ListPermutationsOrCombinations"

Saludos,
KL


'Inicio Codigo
Option Explicit

Dim vAllItems As Variant
Dim Buffer() As String
Dim BufferPtr As Long
Dim Results As Worksheet
'
' Myrna Larson, July 25, 2000, Microsoft.Public.Excel.Misc

Sub ListPermutationsOrCombinations()
Dim Rng As Range
Dim PopSize As Integer
Dim SetSize As Integer
Dim Which As String
Dim n As Double
Const BufferSize As Long = 4096

ActiveSheet.Range("A1").Select
Set Rng = Selection.Columns(1).Cells
If Rng.Cells.Count = 1 Then
Set Rng = Range(Rng, Rng.End(xlDown))
End If

PopSize = Rng.Cells.Count - 2
If PopSize < 2 Then GoTo DataError

SetSize = Rng.Cells(2).Value
If SetSize > PopSize Then GoTo DataError

Which = UCase$(Rng.Cells(1).Value)
Select Case Which
Case "C"
n = Application.WorksheetFunction.Combin(PopSize, SetSize)
Case "P"
n = Application.WorksheetFunction.-Permut(PopSize, SetSize)
Case Else
GoTo DataError
End Select
If n > Cells.Count Then GoTo DataError

Application.ScreenUpdating = False

Set Results = Worksheets.Add

vAllItems = Rng.Offset(2, 0).Resize(PopSize).Value
ReDim Buffer(1 To BufferSize) As String
BufferPtr = 0

If Which = "C" Then
AddCombination PopSize, SetSize
Else
AddPermutation PopSize, SetSize
End If
vAllItems = 0

Application.ScreenUpdating = True
Exit Sub

DataError:
If n = 0 Then
Which = "Enter your data in a vertical range of at least 4 cells." _
& String$(2, 10) _
& "Top cell must contain the letter C or P, 2nd cell is the Number" _
& "of items in a subset, the cells below are the values from Which" _
& "the subset is to be chosen."

Else
Which = "This requires " & Format$(n, "#,##0") & _
" cells, more than are available on the worksheet!"
End If
MsgBox Which, vbOKOnly, "DATA ERROR"
Exit Sub
End Sub

Private Sub AddPermutation(Optional PopSize As Integer = 0, _
Optional SetSize As Integer = 0, _
Optional NextMember As Integer = 0)

Static iPopSize As Integer
Static iSetSize As Integer
Static SetMembers() As Integer
Static Used() As Integer
Dim i As Integer

If PopSize <> 0 Then
iPopSize = PopSize
iSetSize = SetSize
ReDim SetMembers(1 To iSetSize) As Integer
ReDim Used(1 To iPopSize) As Integer
NextMember = 1
End If

For i = 1 To iPopSize
If Used(i) = 0 Then
SetMembers(NextMember) = i
If NextMember <> iSetSize Then
Used(i) = True
AddPermutation , , NextMember + 1
Used(i) = False
Else
SavePermutation SetMembers()
End If
End If
Next i

If NextMember = 1 Then
SavePermutation SetMembers(), True
Erase SetMembers
Erase Used
End If

End Sub 'AddPermutation

Private Sub AddCombination(Optional PopSize As Integer = 0, _
Optional SetSize As Integer = 0, _
Optional NextMember As Integer = 0, _
Optional NextItem As Integer = 0)

Static iPopSize As Integer
Static iSetSize As Integer
Static SetMembers() As Integer
Dim i As Integer

If PopSize <> 0 Then
iPopSize = PopSize
iSetSize = SetSize
ReDim SetMembers(1 To iSetSize) As Integer
NextMember = 1
NextItem = 1
End If

For i = NextItem To iPopSize
SetMembers(NextMember) = i
If NextMember <> iSetSize Then
AddCombination , , NextMember + 1, i + 1
Else
SavePermutation SetMembers()
End If
Next i

If NextMember = 1 Then
SavePermutation SetMembers(), True
Erase SetMembers
End If

End Sub 'AddCombination

Private Sub SavePermutation(ItemsChosen() As Integer, _
Optional FlushBuffer As Boolean = False)

Dim i As Integer, sValue As String
Static RowNum As Long, ColNum As Long

If RowNum = 0 Then RowNum = 1
If ColNum = 0 Then ColNum = 1

If FlushBuffer = True Or BufferPtr = UBound(Buffer()) Then
If BufferPtr > 0 Then
If (RowNum + BufferPtr - 1) > Rows.Count Then
RowNum = 1
ColNum = ColNum + 1
If ColNum > 256 Then Exit Sub
End If

Results.Cells(RowNum, ColNum).Resize(BufferPtr, 1).Value _
= Application.WorksheetFunction.Transpose(Buffer())
RowNum = RowNum + BufferPtr
End If

BufferPtr = 0
If FlushBuffer = True Then
Erase Buffer
RowNum = 0
ColNum = 0
Exit Sub
Else
ReDim Buffer(1 To UBound(Buffer))
End If

End If

'construct the next set
For i = 1 To UBound(ItemsChosen)
sValue = sValue & ", " & vAllItems(ItemsChosen(i), 1)
Next i

'and save it in the buffer
BufferPtr = BufferPtr + 1
Buffer(BufferPtr) = Mid$(sValue, 3)
End Sub 'SavePermutation
'Fin Codigo



Preguntas similare

Leer las respuestas

#1 Manolo
31/05/2005 - 15:54 | Informe spam
Hola Max, prueba con Alt-F8

Manolo

"Max" escribió en el mensaje
news:
Disculpa nuevamente he tratado de enviarte la hoja que hice con el macro


que
me has enviado a esta direccion pero me


la
ha rechazado varias veces.He hecho todo como dijiste pero al llegar a
presionar Ctrl + F8 no ocurre nada y por lo tanto no se donde hacer
doble-clic sobre "ListPermutationsOrCombinations". La verdad es que no se


que
hacer. Te agradeceria si me dieras una direccion donde enviar la hoja. O


si
me puedes explicar que hago de mal.
Sinceramente gracias . Max

"KL" escribió:

> Hola Max,
>
> Prueba el siguiente macro publicado por Myrna Larson. Lo tienes que
> depositar en un modulo VBA. Para ello:
>
> 1) haz clic-derecho sobre el nombre de cualquier hoja en una de las


pestañas
> de la parte de abajo de la ventana de Excel.
> 2) Elige la opcion Ver Codigo para abrir el editor VBA.
> 3) Una vez en el Editor VBA, ve al menu Insertar>Modulo
> 4) En la ventana mas grande a la derecha pega el codigo que te pongo a
> continuacion.
>
> 5) Ahora en la hoja activa pon lo siguiente:
>
> celda [A1]= C
> celda [A2]= 3
> celda [A3]= 1
> celda [A4]= 2
> celda [A5]= 3
> celda [A...]= ...
> celda [A9]= 7
>
> 6) Pulsa Ctrl+F8
> 7) Haz doble-clic sobre "ListPermutationsOrCombinations"
>
> Saludos,
> KL
>
>
> 'Inicio Codigo
> Option Explicit
>
> Dim vAllItems As Variant
> Dim Buffer() As String
> Dim BufferPtr As Long
> Dim Results As Worksheet
> '
> ' Myrna Larson, July 25, 2000, Microsoft.Public.Excel.Misc
>
> Sub ListPermutationsOrCombinations()
> Dim Rng As Range
> Dim PopSize As Integer
> Dim SetSize As Integer
> Dim Which As String
> Dim n As Double
> Const BufferSize As Long = 4096
>
> ActiveSheet.Range("A1").Select
> Set Rng = Selection.Columns(1).Cells
> If Rng.Cells.Count = 1 Then
> Set Rng = Range(Rng, Rng.End(xlDown))
> End If
>
> PopSize = Rng.Cells.Count - 2
> If PopSize < 2 Then GoTo DataError
>
> SetSize = Rng.Cells(2).Value
> If SetSize > PopSize Then GoTo DataError
>
> Which = UCase$(Rng.Cells(1).Value)
> Select Case Which
> Case "C"
> n = Application.WorksheetFunction.Combin(PopSize, SetSize)
> Case "P"
> n = Application.WorksheetFunction.-Permut(PopSize, SetSize)
> Case Else
> GoTo DataError
> End Select
> If n > Cells.Count Then GoTo DataError
>
> Application.ScreenUpdating = False
>
> Set Results = Worksheets.Add
>
> vAllItems = Rng.Offset(2, 0).Resize(PopSize).Value
> ReDim Buffer(1 To BufferSize) As String
> BufferPtr = 0
>
> If Which = "C" Then
> AddCombination PopSize, SetSize
> Else
> AddPermutation PopSize, SetSize
> End If
> vAllItems = 0
>
> Application.ScreenUpdating = True
> Exit Sub
>
> DataError:
> If n = 0 Then
> Which = "Enter your data in a vertical range of at least 4 cells." _
> & String$(2, 10) _
> & "Top cell must contain the letter C or P, 2nd cell is the Number" _
> & "of items in a subset, the cells below are the values from Which" _
> & "the subset is to be chosen."
>
> Else
> Which = "This requires " & Format$(n, "#,##0") & _
> " cells, more than are available on the worksheet!"
> End If
> MsgBox Which, vbOKOnly, "DATA ERROR"
> Exit Sub
> End Sub
>
> Private Sub AddPermutation(Optional PopSize As Integer = 0, _
> Optional SetSize As Integer = 0, _
> Optional NextMember As Integer = 0)
>
> Static iPopSize As Integer
> Static iSetSize As Integer
> Static SetMembers() As Integer
> Static Used() As Integer
> Dim i As Integer
>
> If PopSize <> 0 Then
> iPopSize = PopSize
> iSetSize = SetSize
> ReDim SetMembers(1 To iSetSize) As Integer
> ReDim Used(1 To iPopSize) As Integer
> NextMember = 1
> End If
>
> For i = 1 To iPopSize
> If Used(i) = 0 Then
> SetMembers(NextMember) = i
> If NextMember <> iSetSize Then
> Used(i) = True
> AddPermutation , , NextMember + 1
> Used(i) = False
> Else
> SavePermutation SetMembers()
> End If
> End If
> Next i
>
> If NextMember = 1 Then
> SavePermutation SetMembers(), True
> Erase SetMembers
> Erase Used
> End If
>
> End Sub 'AddPermutation
>
> Private Sub AddCombination(Optional PopSize As Integer = 0, _
> Optional SetSize As Integer = 0, _
> Optional NextMember As Integer = 0, _
> Optional NextItem As Integer = 0)
>
> Static iPopSize As Integer
> Static iSetSize As Integer
> Static SetMembers() As Integer
> Dim i As Integer
>
> If PopSize <> 0 Then
> iPopSize = PopSize
> iSetSize = SetSize
> ReDim SetMembers(1 To iSetSize) As Integer
> NextMember = 1
> NextItem = 1
> End If
>
> For i = NextItem To iPopSize
> SetMembers(NextMember) = i
> If NextMember <> iSetSize Then
> AddCombination , , NextMember + 1, i + 1
> Else
> SavePermutation SetMembers()
> End If
> Next i
>
> If NextMember = 1 Then
> SavePermutation SetMembers(), True
> Erase SetMembers
> End If
>
> End Sub 'AddCombination
>
> Private Sub SavePermutation(ItemsChosen() As Integer, _
> Optional FlushBuffer As Boolean = False)
>
> Dim i As Integer, sValue As String
> Static RowNum As Long, ColNum As Long
>
> If RowNum = 0 Then RowNum = 1
> If ColNum = 0 Then ColNum = 1
>
> If FlushBuffer = True Or BufferPtr = UBound(Buffer()) Then
> If BufferPtr > 0 Then
> If (RowNum + BufferPtr - 1) > Rows.Count Then
> RowNum = 1
> ColNum = ColNum + 1
> If ColNum > 256 Then Exit Sub
> End If
>
> Results.Cells(RowNum, ColNum).Resize(BufferPtr, 1).Value _
> = Application.WorksheetFunction.Transpose(Buffer())
> RowNum = RowNum + BufferPtr
> End If
>
> BufferPtr = 0
> If FlushBuffer = True Then
> Erase Buffer
> RowNum = 0
> ColNum = 0
> Exit Sub
> Else
> ReDim Buffer(1 To UBound(Buffer))
> End If
>
> End If
>
> 'construct the next set
> For i = 1 To UBound(ItemsChosen)
> sValue = sValue & ", " & vAllItems(ItemsChosen(i), 1)
> Next i
>
> 'and save it in the buffer
> BufferPtr = BufferPtr + 1
> Buffer(BufferPtr) = Mid$(sValue, 3)
> End Sub 'SavePermutation
> 'Fin Codigo
>
>
>

Respuesta Responder a este mensaje
#2 KL
31/05/2005 - 19:35 | Informe spam
Eso es, no se trata de probar, sino de mi error :-) Por cierto, para
enviarme correo tienes que quitar NOSPAM y PLEASE de la direccion.

Saludos,
KL

"Manolo" <manuelfelipaARROBAhotmail.com> wrote in message
news:
Hola Max, prueba con Alt-F8

Manolo

"Max" escribió en el mensaje
news:
Disculpa nuevamente he tratado de enviarte la hoja que hice con el macro


que
me has enviado a esta direccion pero
me


la
ha rechazado varias veces.He hecho todo como dijiste pero al llegar a
presionar Ctrl + F8 no ocurre nada y por lo tanto no se donde hacer
doble-clic sobre "ListPermutationsOrCombinations". La verdad es que no se


que
hacer. Te agradeceria si me dieras una direccion donde enviar la hoja. O


si
me puedes explicar que hago de mal.
Sinceramente gracias . Max

"KL" escribió:

> Hola Max,
>
> Prueba el siguiente macro publicado por Myrna Larson. Lo tienes que
> depositar en un modulo VBA. Para ello:
>
> 1) haz clic-derecho sobre el nombre de cualquier hoja en una de las


pestañas
> de la parte de abajo de la ventana de Excel.
> 2) Elige la opcion Ver Codigo para abrir el editor VBA.
> 3) Una vez en el Editor VBA, ve al menu Insertar>Modulo
> 4) En la ventana mas grande a la derecha pega el codigo que te pongo a
> continuacion.
>
> 5) Ahora en la hoja activa pon lo siguiente:
>
> celda [A1]= C
> celda [A2]= 3
> celda [A3]= 1
> celda [A4]= 2
> celda [A5]= 3
> celda [A...]= ...
> celda [A9]= 7
>
> 6) Pulsa Ctrl+F8
> 7) Haz doble-clic sobre "ListPermutationsOrCombinations"
>
> Saludos,
> KL
>
>
> 'Inicio Codigo
> Option Explicit
>
> Dim vAllItems As Variant
> Dim Buffer() As String
> Dim BufferPtr As Long
> Dim Results As Worksheet
> '
> ' Myrna Larson, July 25, 2000, Microsoft.Public.Excel.Misc
>
> Sub ListPermutationsOrCombinations()
> Dim Rng As Range
> Dim PopSize As Integer
> Dim SetSize As Integer
> Dim Which As String
> Dim n As Double
> Const BufferSize As Long = 4096
>
> ActiveSheet.Range("A1").Select
> Set Rng = Selection.Columns(1).Cells
> If Rng.Cells.Count = 1 Then
> Set Rng = Range(Rng, Rng.End(xlDown))
> End If
>
> PopSize = Rng.Cells.Count - 2
> If PopSize < 2 Then GoTo DataError
>
> SetSize = Rng.Cells(2).Value
> If SetSize > PopSize Then GoTo DataError
>
> Which = UCase$(Rng.Cells(1).Value)
> Select Case Which
> Case "C"
> n = Application.WorksheetFunction.Combin(PopSize, SetSize)
> Case "P"
> n = Application.WorksheetFunction.-Permut(PopSize, SetSize)
> Case Else
> GoTo DataError
> End Select
> If n > Cells.Count Then GoTo DataError
>
> Application.ScreenUpdating = False
>
> Set Results = Worksheets.Add
>
> vAllItems = Rng.Offset(2, 0).Resize(PopSize).Value
> ReDim Buffer(1 To BufferSize) As String
> BufferPtr = 0
>
> If Which = "C" Then
> AddCombination PopSize, SetSize
> Else
> AddPermutation PopSize, SetSize
> End If
> vAllItems = 0
>
> Application.ScreenUpdating = True
> Exit Sub
>
> DataError:
> If n = 0 Then
> Which = "Enter your data in a vertical range of at least 4 cells." _
> & String$(2, 10) _
> & "Top cell must contain the letter C or P, 2nd cell is the Number" _
> & "of items in a subset, the cells below are the values from Which" _
> & "the subset is to be chosen."
>
> Else
> Which = "This requires " & Format$(n, "#,##0") & _
> " cells, more than are available on the worksheet!"
> End If
> MsgBox Which, vbOKOnly, "DATA ERROR"
> Exit Sub
> End Sub
>
> Private Sub AddPermutation(Optional PopSize As Integer = 0, _
> Optional SetSize As Integer = 0, _
> Optional NextMember As Integer = 0)
>
> Static iPopSize As Integer
> Static iSetSize As Integer
> Static SetMembers() As Integer
> Static Used() As Integer
> Dim i As Integer
>
> If PopSize <> 0 Then
> iPopSize = PopSize
> iSetSize = SetSize
> ReDim SetMembers(1 To iSetSize) As Integer
> ReDim Used(1 To iPopSize) As Integer
> NextMember = 1
> End If
>
> For i = 1 To iPopSize
> If Used(i) = 0 Then
> SetMembers(NextMember) = i
> If NextMember <> iSetSize Then
> Used(i) = True
> AddPermutation , , NextMember + 1
> Used(i) = False
> Else
> SavePermutation SetMembers()
> End If
> End If
> Next i
>
> If NextMember = 1 Then
> SavePermutation SetMembers(), True
> Erase SetMembers
> Erase Used
> End If
>
> End Sub 'AddPermutation
>
> Private Sub AddCombination(Optional PopSize As Integer = 0, _
> Optional SetSize As Integer = 0, _
> Optional NextMember As Integer = 0, _
> Optional NextItem As Integer = 0)
>
> Static iPopSize As Integer
> Static iSetSize As Integer
> Static SetMembers() As Integer
> Dim i As Integer
>
> If PopSize <> 0 Then
> iPopSize = PopSize
> iSetSize = SetSize
> ReDim SetMembers(1 To iSetSize) As Integer
> NextMember = 1
> NextItem = 1
> End If
>
> For i = NextItem To iPopSize
> SetMembers(NextMember) = i
> If NextMember <> iSetSize Then
> AddCombination , , NextMember + 1, i + 1
> Else
> SavePermutation SetMembers()
> End If
> Next i
>
> If NextMember = 1 Then
> SavePermutation SetMembers(), True
> Erase SetMembers
> End If
>
> End Sub 'AddCombination
>
> Private Sub SavePermutation(ItemsChosen() As Integer, _
> Optional FlushBuffer As Boolean = False)
>
> Dim i As Integer, sValue As String
> Static RowNum As Long, ColNum As Long
>
> If RowNum = 0 Then RowNum = 1
> If ColNum = 0 Then ColNum = 1
>
> If FlushBuffer = True Or BufferPtr = UBound(Buffer()) Then
> If BufferPtr > 0 Then
> If (RowNum + BufferPtr - 1) > Rows.Count Then
> RowNum = 1
> ColNum = ColNum + 1
> If ColNum > 256 Then Exit Sub
> End If
>
> Results.Cells(RowNum, ColNum).Resize(BufferPtr, 1).Value _
> = Application.WorksheetFunction.Transpose(Buffer())
> RowNum = RowNum + BufferPtr
> End If
>
> BufferPtr = 0
> If FlushBuffer = True Then
> Erase Buffer
> RowNum = 0
> ColNum = 0
> Exit Sub
> Else
> ReDim Buffer(1 To UBound(Buffer))
> End If
>
> End If
>
> 'construct the next set
> For i = 1 To UBound(ItemsChosen)
> sValue = sValue & ", " & vAllItems(ItemsChosen(i), 1)
> Next i
>
> 'and save it in the buffer
> BufferPtr = BufferPtr + 1
> Buffer(BufferPtr) = Mid$(sValue, 3)
> End Sub 'SavePermutation
> 'Fin Codigo
>
>
>





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida