Microsoft Excel

Herbers Excel/VBA-Archiv

ParamArray macht mir Kummer | Herbers Excel-Forum


Betrifft: ParamArray macht mir Kummer von: Mathias
Geschrieben am: 25.01.2010 16:56:47

Hallo Leute,

ich habe ein Problem bezüglich des ParamArray.

Ich möchte in ein ParamArray bestimmt Objekte (Controls) und für diese Objekte Werte übergeben lassen. Bereits in Erfahrung bringen konnte ich für mich, dass wie bei jedem Array, ein Element immer mit einer Indexnummer (Feldindex) abgelegt wird.

Unter diesen Umständen habe ich mir nun folgende Schritte gedacht:
1. Feldindex des ParamArray-Elementes, das ein Objekt ist, bestimmen
2. Alle nachfolgenden Param-Array-Elemente, die selbst kein Objekt sind, dem Objekt aus 1. als Wert zuweisen
3. Wenn in der Folge der ParamArray-Elemente wieder auf ein Objekt gestoßen wird, dann wieder mit 1. beginnen
4. Ausstieg, wenn Ende der ParamArray-Elemente erreicht.

Mein Hauptproblem ist vorallem, dass ich nicht weiß, wie ich den Feldindex eines einzelnen ParamArray-Elementes auslesen kann. Hat jemand von euch eine Ahnung?

ich möchte, wenn ich den Feldindex weiß, einfach alle nachfolgenden als Wert zuweisen. Vielleicht noch als Anmerkung: Ich weiß, dass ich z.B. einem Objekt immer 4 Werte zuweisen will. Ich weiß aber im Vorfeld nicht wieviele Objekt insgesamt ich anpacken muss.

Gruß
Mathias

  

Betrifft: AW: ParamArray macht mir Kummer von: Tino
Geschrieben am: 25.01.2010 17:20:11

Hallo,

"Mein Hauptproblem ist vorallem, dass ich nicht weiß, wie ich den Feldindex eines einzelnen ParamArray-Elementes auslesen kann. Hat jemand von euch eine Ahnung?"

Der Index geht in der Regel von 0 bis n also LBound(Array) to Ubound(Array) und auch so
kannst Du diese in einer For Next Schleife Durchlaufen.

for i LBound(Array) to Ubound(Array)
Array(i)....
next i

Gruß Tino


  

Betrifft: AW: ParamArray macht mir Kummer von: Josef Ehrensberger
Geschrieben am: 25.01.2010 17:25:17

Hallo Matthias,

und wie willst du der Prozedur mitteilen, welcher Eigenschaft des Objektes du einen Wert zuweisen möchtest?


Gruß Sepp



  

Betrifft: AW: ParamArray macht mir Kummer von: Nepumuk
Geschrieben am: 25.01.2010 19:31:53

Ja genau,

warum also nicht einfach ein Array aus einem benutzerdefinierten Datentyp mit Objekt, Eigenschaft(en) [auch wieder ein Array] und Wert(en) [auch wieder ein Array]? Oder Eigenschaften und Werte als Array eines benutzerdefinierter Datentyps im Array des Objektdatentyps? Damit wärst du auch noch unabhängig von der Anzahl der Eignschaften. Eigenschaften kannst du per CallByName dann schreiben.

Gruß
Nepumuk


  

Betrifft: AW: ParamArray macht mir Kummer von: Mathias
Geschrieben am: 25.01.2010 20:37:28

Hallo Ihr Zwei,



ich habe mir den Ablauf so gedacht, da ich auf keine andere Lösung mangelns Wissen gekommen bin. Ich hatte daran gedacht, dass ich bereits bei der Parametereingabe darauf achten muss, wie ich das eingebe. Wenn ich dort eine gewisse Reihenfolge einhalte, kann ich das gut mit einer Schleife lösen.



Aber, Nepumuk...dein Vorschlag klingt noch interessanter. Allerdings habe ich keine Ahnung, wie ich sowas (recht einfach) basteln kann. Kannst du mir da einmal einen Denkanstoß geben?



Gruß

Mathias


  

Betrifft: AW: ParamArray macht mir Kummer von: Nepumuk
Geschrieben am: 25.01.2010 22:06:13

Hallo,

ein einfaches Beispiel:

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Type XY_Property
    strProperty As String
    vntValue As Variant
End Type

Private Type XY_Object
    objObject As Object
    udtProperties() As XY_Property
End Type

Public Sub Beispiel_1()
    Dim udtObject() As XY_Object
    Dim lngAnzahlObjekte As Long, lngAnzahlEigenschaften As Long
    
    For lngAnzahlObjekte = 1 To Anzahl_Objekte '???
        
        Redim Preserve udtObject(1 To lngAnzahlObjekte)
        
        With udtObject(lngAnzahlObjekte)
            
            Set .objObject = DeinObjekt
            
            'Anzahl der Eigenschaften ermitteln oder auch hier eine Schleife ???
            
            Redim .udtProperties(1 To lngAnzahlEigenschaften)
            
            With .udtProperties(1)
                .strProperty = "Eigenschaft1"
                .vntValue = Wert_Eigenschaft1
            End With
            
            With .udtProperties(2)
                .strProperty = "Eigenschaft3"
                .vntValue = Wert_Eigenschaft2
            End With
            
            With .udtProperties(3)
                .strProperty = "Eigenschaft3"
                .vntValue = Wert_Eigenschaft3
            End With
        End With
    Next
    
    Call Beispiel_2(udtObject())
    
End Sub

Public Sub Beispiel_2(udtObject() As XY_Object)
    Dim lngObjectIndex As Long, lngPropertyIndex As Long
    For lngObjectIndex = LBound(udtObject) To UBound(udtObject)
        With udtObject(lngObjectIndex)
            For lngPropertyIndex = LBound(.udtProperties) To UBound(.udtProperties)
                CallByName .objObject, .udtProperties(lngPropertyIndex).strProperty, _
                    VbLet, .udtProperties(lngPropertyIndex).vntValue
            Next
        End With
    Next
End Sub

Da ich keine Ahnung habe, was das für Objekte und Eigenschaften sind, hab ich es mal allgemein gehalten. Die verwendeten Namen sind natürlich nicht zwingend, ich würde da schon genauere Bezeichnungen verwenden.

Gruß
Nepumuk


  

Betrifft: AW: ParamArray macht mir Kummer von: Mathias
Geschrieben am: 26.01.2010 08:29:10

Hallo Nepumuk,

danke für die Hilfe. Das passt zwar nicht zu 100% in mein Vorhaben, eröffnet aber eine andere Perspektive.

Gruß
Mathias


Beiträge aus den Excel-Beispielen zum Thema "ParamArray macht mir Kummer"