vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Element im Int-Array löschen und re-dimensionieren 
Autor: kerim80
Datum: 28.02.08 14:47

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:

x = PosZahl(UBound(GewichteterArray))
Private Function PosZahl(ByRef ObereGrenze As Integer) As Integer
Randomize -Timer         ' Sicherstellen, daß bei jedem Start wirklich eine 
' neue Zufallszahl generiert wird
PosZahl = Int(Rnd * ObereGrenze)     ' gibt Zahlen im Bereich von [0 - 
' Oberegrenze]
End Function
3. lösche diese Eintrag (Zufallszahl) aus dem Array, mit folgendem Code:
den Code habe ich von der Seite: http://www.vbarchiv.net/archiv/tipp_955.html
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???
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Element im Int-Array löschen und re-dimensionieren2.562kerim8028.02.08 14:47
Re: Element im Int-Array löschen und re-dimensionieren885ModeratorDieter02.03.08 09:09

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel