Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
500to504
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
500to504
500to504
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Redim Datenfeld

Redim Datenfeld
19.10.2004 19:43:10
Jens_Pu
Hallo Excelfreunde,
kann mir bitte mal jemand auf die Sprünge helfen, was da falsch ist. Sobald die For Each Schleife den 2. Durchgang macht, steigt er bei Redim aus (Index außerhalb...). Ich begreife es nicht. Danke schon mal.

Option Explicit
Option Base 1

      
Private Sub Controlwerte_in_Datenfeld()
  
Dim ctlFrame As Control
  
Dim cnt As Control
  
Dim intI As Integer
  
Dim arrFrames As Variant
  
Dim arrCbo() As Variant
  
Dim arrTxt() As Variant
  
Dim intArrCboCount As Integer
  
Dim intArrTxtCount As Integer
  
  arrFrames = Array("Frame1", "Frame2", "Frame3", "Frame4") 
'ZE, BA, FG, Onl

  
For intI = LBound(arrFrames) To UBound(arrFrames)    'Schleife über die Frames
    Set ctlFrame = Controls(arrFrames(intI))
    intArrCboCount = 1
    intArrTxtCount = 1
    
For Each cnt In ctlFrame.Controls             'Schleife über die Controls eines Frames
      If TypeName(cnt) = "ComboBox" Then
        
'Was gemacht werden muß bei einer ComboBox
        ReDim Preserve arrCbo(intArrCboCount, 4)
        arrCbo(intArrCboCount, 1) = cnt.Name
        arrCbo(intArrCboCount, 2) = cnt.Value
        arrCbo(intArrCboCount, 3) = cnt.text
        arrCbo(intArrCboCount, 4) = cnt.Tag
        intArrCboCount = intArrCboCount + 1
      
Else
        
'Was bei allen andern Controls gemacht wird
        If TypeName(cnt) = "TextBox" Then
          
'Was gemacht werden muß bei einer ComboBox
          ReDim Preserve arrTxt(intArrTxtCount, 4)
          arrTxt(intArrTxtCount, 1) = cnt.Name
          arrTxt(intArrTxtCount, 2) = cnt.Value
          arrTxt(intArrTxtCount, 3) = cnt.text
          arrTxt(intArrTxtCount, 4) = cnt.Tag
          intArrTxtCount = intArrTxtCount + 1
        
End If
      
End If
    
Next cnt
  
Next intI
End Sub 

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Redim Datenfeld
andreas
Kannst mal bitte die Datei posten ? Weil ich nicht weiß was es mit den Cotrols auf sich hat !
Danke !
AW: Redim Datenfeld
19.10.2004 20:01:23
Jens_Pu
Hallo Andreas,
das geht in diesem Fall leider nicht.
Zur Info:
Da ist eine Userform mit ComboBoxen, TextBoxen etc.
Mit der Routine sollen deren Werte in ein Datenfeld eingelesen werden.
Gruß Jens
AW: Redim Datenfeld
PeterW
Hallo Jens,
vielleicht hilft die VBA-Hilfe (aus 2002) da weiter:
Die Anzahl der Dimensionen kann nicht verändert werden. Mit dem Schlüsselwort Preserve können Sie nur die Größe der letzten Datenfelddimension ändern. Wenn das Datenfeld zum Beispiel nur eine Dimension hat, können Sie die Größe dieser Dimension ändern, weil es die letzte und einzige Dimension ist. Hat das Datenfeld jedoch mindestens zwei Dimensionen, so können Sie lediglich die Größe der letzten Dimension ändern, wenn der Inhalt des Datenfeldes erhalten bleiben soll. Das folgende Beispiel verdeutlicht, wie Sie die letzte Dimension eines dynamischen Datenfeldes vergrößern können, ohne bereits bestehende Daten im Datenfeld zu löschen.
Gruß
Peter
Anzeige
AW: Redim Datenfeld
andreas
Bitte Mappe online stellen und ich werde das problem lösen !
AW: Redim Datenfeld
PeterW
Hallo Andreas,
warum antwortest du mir?
An deiner Kompetenz zur Lösung des Problems dürfte niemand hier im Forum zweifeln.
Gruß
Peter
AW: Redim Datenfeld
19.10.2004 20:21:21
Jens_Pu
Hallo Peter,
das habe ich scheinbar überlesen.
Da wird mir wohl nichts anderes übrig bleiben, als voher mit einer neuen Schleife die Anzahl der Controls zu ermitteln, um dann das Datenfeld gleich fest zu dimensionieren.
Oder bist Du da anderer Meinung?
Gruß Jens
AW: Redim Datenfeld
PeterW
Hallo Jens,
von Arrays hab ich nur rudimentäre Kenntnisse und deinen Code hab ich nur auf den Fehler hin betrachtet. Kannst du das Array nicht "drehen", also erste Dimension 4 und die zweite dann mit Redim Preserve anpassen?
Ich lass die Frage mal lieber offen. :-)
Gruß
Peter
Anzeige
AW: Redim Datenfeld
19.10.2004 20:37:26
Jens_Pu
Hallo Peter,
die erste Dimension entspricht der Anzahl der Controls, die zweite enthält dann die Werte der Controls. Geht also leider nicht.
Trotzdem vielen Dank für Eure Bemühungen.
Gruß Jens
AW: Redim Datenfeld
PeterW
Hallo Jens,
natürlich geht das. Stell dir eine Tabelle vor, die du transponierst, nichts anderes ist es mit dem "Drehen des Datenfeldes". Also erste Dimension 1 bis 4 die Werte des Controls und zweite Dimension die Anzahl der Controls.
Gruß
Peter
AW: Redim Datenfeld
19.10.2004 22:04:48
Jens_Pu
Hallo Peter,
oh, jeh, Du hast natürlich recht.
Danke.
Gruß Jens

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige