Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Attributliste aus Klassenobjekt auslesen
#1
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


Angehängte Dateien
.xlsm   20181115_LB1972_Klassen_Ein-und-Auslesen.xlsm (Größe: 26,41 KB / Downloads: 7)
Antwortento top
#2
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.
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Antwortento top
#3
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


Angehängte Dateien
.xlsb   __Klassen_Ein-und-Auslesen.xlsb (Größe: 18,83 KB / Downloads: 2)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antwortento top
#4
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
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Antwortento top
#5
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
Antwortento top
#6
@Kuwer

Bittte, verwende Code Tags !!
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antwortento top
#7
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
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste