Clever-Excel-Forum

Normale Version: Attributliste aus Klassenobjekt auslesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten abend zusammen,

ich möchte aus einer Liste, die ich in ein Klassenobjekt einlese, in einem Nachfolgeschritte eine Attributliste wieder ausgeben.
Dabei schaffe ich es nicht, bei der Ausgabe den unerwünschten Effekt zu vermeiden, dass meine Ausgabe erst in Zeile 2 beginnt.
--> d.h. ich suche nach dem Zauberhandgriff, der die Ausgabe in Zeile 1 beginnen lässt.

Der Reihe nach:

Die angehängte Datei hat auf der Tabelle 1 einen definierten Bereich "Liste" mit Einzelspalten als Unterbereiche
"No_Spalte", "Bez_Spalte", "MB_Spalte" und "St_Spalte"

In dieser Liste sind 20 Teile beschrieben: Zählnummer, Name, Kennzeichnung (M/B) und Stückzahl

Ich habe die Klasse "Teile" definiert:
Code:
Option Explicit

Private mintNummer As Integer
Private mstrBezeichnung As String
Private mstrM_B As String
Private mintStueck As Integer
'----------------------------------'----------------------------------Nummer
Public Property Get Nummer() As Integer
Nummer = mintNummer
End Property
'----------------------------------
Public Property Let Nummer(ByVal vNewValue As Integer)
mintNummer = vNewValue
End Property
'----------------------------------
'----------------------------------Bezeichnung
Public Property Get Bezeichnung() As String
Bezeichnung = mstrBezeichnung
End Property
'----------------------------------
Public Property Let Bezeichnung(ByVal vNewValue As String)
mstrBezeichnung = vNewValue
End Property
'----------------------------------
'----------------------------------M_B
Public Property Get M_B() As String
M_B = mstrM_B
End Property
'----------------------------------
Public Property Let M_B(ByVal vNewValue As String)
mstrM_B = vNewValue
End Property
'----------------------------------
'----------------------------------Stueck
Public Property Get Stueck() As Integer
Stueck = mintStueck
End Property
'----------------------------------
Public Property Let Stueck(ByVal vNewValue As Integer)
mintStueck = vNewValue
End Property
'----------------------------------
diese befülle ich mit der Prozedur "ObjektListe_Erstellen", die zum Schluss die Ausgabe der Namen in Spalte J erreicht:
Code:
Option Explicit

Public i As Integer, k As Integer, j As Integer 'Zähler
Public Teile() As cls_Teile                     'Klasse
Public myArray() As Variant                     'Hilfsarray

Sub ObjektListe_Erstellen()

  '##############################################
  '##### Prozedur zur Erstellung einer ##########
  '##### internen Teileliste           ##########
  '##############################################


    i = Empty   'Sicherstellen, dass die Zählvarianten den Startwert 0 haben
   j = Empty
   k = Empty
   
   
   i = Range("Liste").Rows.Count                           'Listenlänge ermitteln
   
   ReDim Teile(1 To i)                                          'cls_Teile dimensionieren
   
       For k = 1 To i
       
           Set Teile(k) = New cls_Teile
           
           Teile(k).Nummer = Cells(Range("Liste").Row + k - 1, Range("No_Spalte").Column).Value
           Teile(k).Bezeichnung = Cells(Range("Liste").Row + k - 1, Range("Bez_Spalte").Column).Value
           Teile(k).M_B = Cells(Range("Liste").Row + k - 1, Range("MB_Spalte").Column).Value
           Teile(k).Stueck = Cells(Range("Liste").Row + k - 1, Range("St_Spalte").Column).Value
           
       Next
       
   
   ReDim myArray(1, i)                                     'Hilfsarray dimensionieren
   
       For j = 1 To i
           myArray(1, j) = Teile(j).Bezeichnung           'Hilfsarray bestücken mit Attribut Teilebezeichnung
       Next
   
   
                                                           'Attribut in Spalte ausgeben
   
   Cells(1, 10).Resize(i + 1, 1) = _
   WorksheetFunction.Index(WorksheetFunction.Transpose(myArray), 0, 2)
   
   
   i = Empty
   j = Empty
   k = Empty                                           'Zähler leeren

End Sub
Leider schaffe ich es nicht, diese Ausgabe in der Excelzeile 1 beginnen zu lassen, was eigentlich mein gewünschtes Ergebnis wäre.
Kann mir hier jemand einen heißen Tipp geben?
Vielen Dank schon mal und schönen Abend noch.
Gruß Ludwig
HI,

mitten durch die Brust ins Auge ;)

Code:
    ReDim myArray(1 To 1, 1 To i)                                    'Hilfsarray dimensionieren
    
        For j = 1 To i
            myArray(1, j) = Teile(j).Bezeichnung           'Hilfsarray bestücken mit Attribut Teilebezeichnung
        Next
    
    
                                                            'Attribut in Spalte ausgeben
    
    Cells(1, 10).Resize(i, 1) = WorksheetFunction.Transpose(myArray)

ändere diesen Bereich so ab.
Könnte etwas einfacher gestaltet werden:


Code:
Sub ObjektListe_Erstellen()
    sn = Tabelle1.Cells(8, 2).CurrentRegion
    ReDim sp(UBound(sn)) As New cls_Teile
    
    For j = 0 To UBound(sn) - 2
       sp(j).Nummer = sn(j + 2, 1)
       sp(j).Bezeichnung = sn(j + 2, 2)
       sp(j).M_B = sn(j + 2, 3)
       sp(j).Stueck = sn(j + 2, 4)
    Next
        
    ReDim sq(UBound(sp), 0)
    For j = 0 To UBound(sq)
       sq(j, 0) = sp(j).Bezeichnung
    Next
    
    Cells(1, 10).Resize(UBound(sq) + 1) = sq
End Sub
Hi,
:)
Zitat:Könnte etwas einfacher gestaltet werden:
ja, z.B

Code:
Sub itu()
Range("Bez_Spalte").Copy Cells(1, 10)
End Sub

darum
Zitat:mitten durch die Brust ins Auge ;)

ich vermute mal, dies ist eine Informatikaufgabe einer Bildungseinrichtung, von welcher auch immer.
lg
Hallo,

dann aber doch etwas einfacher:
Sub ObjektListe_Erstellen()

  '##############################################
  '##### Prozedur zur Erstellung einer ##########
  '##### internen Teileliste           ##########
  '##############################################

   i = Empty   'Sicherstellen, dass die Zählvarianten den Startwert 0 haben
   j = Empty
   k = Empty
   
   i = Range("Liste").Rows.Count                           'Listenlänge ermitteln
   
   ReDim Teile(1 To i)                                          'cls_Teile dimensionieren
       For k = 1 To i
           Set Teile(k) = New cls_Teile
           
           Teile(k).Nummer = Cells(Range("Liste").Row + k - 1, Range("No_Spalte").Column).Value
           Teile(k).Bezeichnung = Cells(Range("Liste").Row + k - 1, Range("Bez_Spalte").Column).Value
           Teile(k).M_B = Cells(Range("Liste").Row + k - 1, Range("MB_Spalte").Column).Value
           Teile(k).Stueck = Cells(Range("Liste").Row + k - 1, Range("St_Spalte").Column).Value
           
       Next k
       
   ReDim myArray(1 To i, 1 To 1)                                    'Hilfsarray dimensionieren
   
   For j = 1 To i
       myArray(j, 1) = Teile(j).Bezeichnung           'Hilfsarray bestücken mit Attribut Teilebezeichnung
   Next
   
   Cells(1, 10).Resize(i, 1) = myArray                     'Attribut in Spalte ausgeben
   
   i = Empty
   j = Empty
   k = Empty                                           'Zähler leeren

End Sub
Gruß Uwe
@Kuwer

Bittte, verwende Code Tags !!
Guten Abend allerseits,

alle eure Lösungen funktionieren. Zugegebenermaßen habe ich noch nicht alles verstanden; ich habe somit Stoff zum Nachdenken. Das gemutmaßte Bildungsinstitut
bin ich übrigens selber und versuche mich zurzeit mit der Anwendung von Objektklassen. Also bitte keine falschen Verdachtsmomente gegen Bildungsträger Wink

Vielen Dank für eure Hilfe
Gruß Ludwig