Hallo,
ich will mich kurz/knapp halten. Habe Excel 2007.
Folgendes Szenario und Problem habe ich:
1. habe ein "Gewichtetes Array" vom Typ=Integer, z.B. (0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,etc.) / Einträge von 0 bis 24
2. wähle mir mit folgendem Code aus diesem Array per Zufall einen Eintrag aus:
3. lösche diese Eintrag (Zufallszahl) aus dem Array, mit folgendem Code:
den Code habe ich von der Seite: vbarchiv.net/archiv/tipp_955.html
4. gibt er mir im MS-VB-Editor die Fehlermeldung "Nicht genügend Speicher" oder schließt automatisch das EXCEL-Programm
-> Habt ihr einen Lösungsvorschlag oder einen anderen, wie ich ein ausgewähltes Element von einem Integer-Array lösche und danach redimensioniere???
ich will mich kurz/knapp halten. Habe Excel 2007.
Folgendes Szenario und Problem habe ich:
1. habe ein "Gewichtetes Array" vom Typ=Integer, z.B. (0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,etc.) / Einträge von 0 bis 24
2. wähle mir mit folgendem Code aus diesem Array per Zufall einen Eintrag aus:
Visual Basic-Quellcode
3. lösche diese Eintrag (Zufallszahl) aus dem Array, mit folgendem Code:
den Code habe ich von der Seite: vbarchiv.net/archiv/tipp_955.html
Visual Basic-Quellcode
- ArrayDelete GewichteterArray, x
- Private Declare Sub CopyMemoryPtr Lib "kernel32" _
- Alias "RtlMoveMemory" ( _
- ByVal Destination As Long, _
- ByVal Source As Long, _
- ByVal Length As Long)
- Public Sub ArrayDelete(ByRef sArray() As Integer, _
- ByVal nDelPos As Long, _
- Optional ByVal nSize As Variant, _
- Optional ByVal bRedimSize As Variant)
- Dim nPtr As Long
- ' Größe des Arrays bestimmen, falls nicht angegeben
- If IsMissing(nSize) Then nSize = UBound(sArray)
- If nDelPos < nSize Then
- ' Element aus Array löschen und alle
- ' nachfolgende Elemente nach vorne schieben
- nPtr = StrPtr(sArray(nDelPos))
- CopyMemoryPtr VarPtr(sArray(nDelPos)), VarPtr(sArray(nDelPos + 1)), _
- VarPtr(sArray(nSize)) - VarPtr(sArray(nDelPos))
- CopyMemoryPtr VarPtr(sArray(nSize)), VarPtr(nPtr), Len(nPtr)
- End If
- ' Array ggf. autom. um 1 Element verkleinern
- If IsMissing(bRedimSize) Then bRedimSize = True
- If bRedimSize Then
- nSize = nSize - 1
- If nSize < 0 Then nSize = 0
- ReDim Preserve sArray(nSize)
- Else
- sArray(nSize) = 0
- End If
- End Sub
4. gibt er mir im MS-VB-Editor die Fehlermeldung "Nicht genügend Speicher" oder schließt automatisch das EXCEL-Programm
-> Habt ihr einen Lösungsvorschlag oder einen anderen, wie ich ein ausgewähltes Element von einem Integer-Array lösche und danach redimensioniere???
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kerim80“ ()