Thema Datum  Von Nutzer Rating
Antwort
07.07.2016 10:54:28 Officer_Bierschnitt
NotSolved
07.07.2016 11:11:01 Officer_Bierschnitt
NotSolved
07.07.2016 11:24:38 Officer_Bierschnitt
NotSolved
07.07.2016 16:59:09 Officer_Bierschnitt
NotSolved
Rot Was macht denn dieser Code?
07.07.2016 19:44:04 Gast2443
NotSolved
08.07.2016 10:37:45 Officer_Bierschnitt
Solved
08.07.2016 15:43:03 Officer_Bierschnitt
NotSolved
08.07.2016 17:48:03 Gast10135
NotSolved

Ansicht des Beitrags:
Von:
Gast2443
Datum:
07.07.2016 19:44:04
Views:
454
Rating: Antwort:
  Ja
Thema:
Was macht denn dieser Code?

Moin Officer! ALso die Sub dient zum Einlesen der Daten in die LIstbox auf einer Userform. Hätte man auch in die Userform.initialize packen können. Da wäre alles gleich zusammen und man muss keine extra Sub starten. Aber egal. Unten mal mit einigen Kommentaren. VG

 

Sub Dia_Init()
' Die SUB initiiert eine Listbox in einer Userform - beschreibt sie also mit Werten.
'Dazu liest die Prozedur aus einem Blatt Liste in Spalte A die Zeilen aus, bis eine leere Zeile kommt.
' Es wird in Zeile 3 begonnen. Wenn ein WErt gefunden wird, wird das Jahr des Eintrages in ein Datenfeld geschrieben.
' Im Anschluß wird das Datenfeld an die Listbox übergeben und die Userform1 angezeigt. DAnn sollten die Jahre in der Box sein.

Dim Jahre()  'ist ein Datenfeld
Dim Zähler As Integer
'DAtenfeld initiieren, erstmal auf 0.
Zähler = 0
ReDim Preserve Jahre(Zähler)
Jahre(Zähler) = Null
'Startwert für doe Zeile
x = 3
' Hier wird die gesamte Liste Eintrag für Eintrag durchlaufen, aber halt erst ab Zeile 3 - es gibt nämlich eine Überschrift und danach eine Leerzeile.
While Not IsEmpty(Sheets("Liste").Cells(x, 1).Value)
' Hier wird dem Datenfeld Jahre ein Wert zugefügt.

    If IsNull(Jahre(Zähler)) Then 'prüft, ob der letzte Eintrag im Datenfeld leer ist
    'wenn ja, dann einfach das Jahr in dieses Feld eintragen
        Jahre(Zähler) = Year(Sheets("Liste").Cells(x, 1).Value)
    ElseIf (Jahre(Zähler)) <> Year(Sheets("Liste").Cells(x, 1).Value) Then  'hier wird nochmal geprüft, ob der letzte Wert nicht schon das Jahr ist
        'ist nicht das selbe Jahr wie in de Zelle also eintragen
        'Zähler hochsetzten, Datenfeld neu dimensioniern und dann im zugefügten Feld das neue Jahr eintragen
        Zähler = Zähler + 1
        ReDim Preserve Jahre(Zähler)
        Jahre(Zähler) = Year(Sheets("Liste").Cells(x, 1).Value)
    End If
    'in die nächste Zeile
    x = x + 1
Wend  'die SChleife geht so lange, bis eine leere Zelle kommt

'jetzt die Jahre aus dem Datenfeld an die LIstbox übergeben.
If IsNull(Jahre(0)) Then  'prüfen ob das Datenfeld was enthält. Wenn im ersten Feld Null steht, ist es leer
    
    ' wenn das Feld leer ist, wird die Box hier geleert, dabei wird geprüft, wieviele Einträge sie hat und dann von unten nach oben
    ' jeder Eintrag rausgenommen.
    ' wäre mE kürzer mit   UserForm1.ListBox1.clear     auch gegangen.
    
    While UserForm1.ListBox1.ListCount >= 1  'solange machen, wie Einträge vorhanden sind, Listcount gibt die Anzahl an
        If UserForm1.ListBox1.ListIndex = -1 Then  'wenn das aktive Feld der Listbox nichtgesetzt ist, dann auf dem letzten Wert setzen
            UserForm1.ListBox1.ListIndex = UserForm1.ListBox1.ListCount - 1 'setzt auf den letzen Wert, Da die Zählung bei 0 beginnt, wird -1 gerechnet
        End If
        UserForm1.ListBox1.RemoveItem (UserForm1.ListBox1.ListIndex)  'jetzt das Element das ausgewählt ist löschen
    Wend
    
    'jetzt solle die Box leer sein. Wie geschrieben, könnte auch kürzer und damit schneller gehen
    
Else
    'DAtenfeld enthält wert, dann das Feld direkt zuweisen. DAmit stehen alle Werte drin
    UserForm1.ListBox1.List() = Jahre()
    'Userform anzeigen, damit man die Jahre auswählen kann
    UserForm1.Show
End If
End Sub

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
07.07.2016 10:54:28 Officer_Bierschnitt
NotSolved
07.07.2016 11:11:01 Officer_Bierschnitt
NotSolved
07.07.2016 11:24:38 Officer_Bierschnitt
NotSolved
07.07.2016 16:59:09 Officer_Bierschnitt
NotSolved
Rot Was macht denn dieser Code?
07.07.2016 19:44:04 Gast2443
NotSolved
08.07.2016 10:37:45 Officer_Bierschnitt
Solved
08.07.2016 15:43:03 Officer_Bierschnitt
NotSolved
08.07.2016 17:48:03 Gast10135
NotSolved