Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
264to268
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
264to268
264to268
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Code verkürzen

Code verkürzen
08.06.2003 21:03:52
Jens_Pu
Hallo Excelfreunde,

hat jemand eine Idee, wie ich folgenden Code verkürzen kann?
Für jedes Case unterscheidet sich das immer nur durch die Zahl in dem Datenfeld gTeilnehmerLi(i).P1 <--
Ich steh da irgendwie auf der Leitung.



Private Sub ListboxenAktualisieren(LBnr As Integer)
  'LBnr = 0 beide Listboxen, LBnr = 1 Listbox1, LBnr = 2 Listbox2
  Dim As Integer
  Dim As Integer

  If (LBnr = 0) Or (LBnr = 1) Then
    'Listbox1 füllen
    ListBox1.Clear
    j = 0
    Select Case gAktRunde
      Case 1
          For i = 0 To gAnzTeilnehmer - 1
            If gTeilnehmerLi(i).P1 < 1 Then 'P1
              ListBox1.AddItem
              ListBox1.List(j, 0) = gTeilnehmerLi(i).NN
              ListBox1.List(j, 1) = gTeilnehmerLi(i).VN
              ListBox1.List(j, 2) = gTeilnehmerLi(i).Geschl
              j = j + 1
            End If
          Next
      Case 2
          For i = 0 To gAnzTeilnehmer - 1
            If gTeilnehmerLi(i).P2 < 1 Then 'P2
              ListBox1.AddItem
              ListBox1.List(j, 0) = gTeilnehmerLi(i).NN
              ListBox1.List(j, 1) = gTeilnehmerLi(i).VN
              ListBox1.List(j, 2) = gTeilnehmerLi(i).Geschl
              j = j + 1
            End If
          Next
      Case 3
      Case 4
      Case 5
      Case 6
      Case 7
      Case 8
    End Select
  End If
  
  
  If (LBnr = 0) Or (LBnr = 2) Then
    'Listbox2 füllen
    ListBox2.Clear
    j = 0
    For i = 0 To gAnzTeilnehmer - 1
      If gTeilnehmerLi(i).P1 < 1 Then
        ListBox2.AddItem
        ListBox2.List(j, 0) = gTeilnehmerLi(i).NN
        ListBox2.List(j, 1) = gTeilnehmerLi(i).VN
        ListBox2.List(j, 2) = gTeilnehmerLi(i).Geschl
        j = j + 1
      End If
    Next
  End If
End Sub



     Code eingefügt mit Syntaxhighlighter 2.1

Gruss Jens

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Code verkürzen
08.06.2003 21:40:31
andre

hallo jens,
diesen teil als gesonderte function definieren und P1, P2 usw. als Parameter übergeben oder mit if ... then .. und gaktrunde auswerten und an P dranhängen
private function listen()
For i = 0 To gAnzTeilnehmer - 1
If gTeilnehmerLi(i).P1 < 1 Then 'P1
ListBox1.AddItem
ListBox1.List(j, 0) = gTeilnehmerLi(i).NN
ListBox1.List(j, 1) = gTeilnehmerLi(i).VN
ListBox1.List(j, 2) = gTeilnehmerLi(i).Geschl
j = j + 1
End If
Next
end function
zusatzfrage:
was ist gTeilnehmerLi(i).P1 usw.?
gruss andre



Anzeige
Re: Code verkürzen
08.06.2003 21:44:16
Jens_Pu

Hallo andre,

hatte ich vorhin vergessen.

Public Type Mitglied
Nr As Long
NN As String * 25
VN As String * 20
Geschl As String * 1
P1 As Integer
P2 As Integer
P3 As Integer
P4 As Integer
P5 As Integer
P6 As Integer
P7 As Integer
P8 As Integer
e1 As Integer
e2 As Integer
e3 As Integer
e4 As Integer
e5 As Integer
e6 As Integer
e7 As Integer
e8 As Integer
End Type

Public gTeilnehmerLi() As Mitglied


Gruß Jens

Re: Code verkürzen
08.06.2003 21:45:14
NE

Hi Jens,

ich bin zwar nicht sicher ob ich es richtig verstanden habe und auch nicht so der Experte,

was ich so lese, willst du fallabhängig unterschiedliche Spalten in deinen Listboxes bringen, vom code her tust du also immer dasselbe, nur immer woanders
vielleicht hilft ein 'bildlich gesprochenes Kopieren' mittels einer 3. Variablen (x)?

also in etwa: If (LBnr = 0) and (LBnr = x) Then

Aber wie gesagt, ich bewege mich auf dünnem Eis...

Gruss Nancy
--
Hi my name is Annie Key, please don't hit me.

Anzeige
Re: Code verkürzen
08.06.2003 21:57:16
Jens_Pu

Hallo andre,

das Beispiel habe ich vorhin auch schon gefunden.
Aber ich fülle meine Listbox aus einem Datenfeld.
Wenn gaktrunde = 1 will ich die Werte von P1
Wenn gaktrunde = 2 will ich die Werte von P2 usw.

So bekomme ich die unterschiedlichen "Füllungen" für die Listbox.
Mir ist nur nicht klar, wie ich das machen soll?
So nach dem Prinzip gTeilnehmerLi(i).P & gaktrunde geht das nicht.

Gruss Jens

Anzeige
Re: Code verkürzen
08.06.2003 22:07:43
andre

hallo jens,
ich hatte erst mal ein verständnisproblem. das (i) hab ich vorhin gar nicht so voll genommen, daher mein schuss daneben mit der textbox. das mit dem p1 usw. geht dann wohl nicht, mal sehn, ob mir was dazu einfällt.
gruss andre

Re: Code verkürzen
08.06.2003 22:13:43
Jens_Pu

Hallo andre,

da grüble ich nun auch schon Stunden lang rum. Aber ich bin eben noch nicht so fit mit VBA.
Und ich dachte ich hätte mir da was tolles einfallen lassen heute am geheiligten Feiertag. Das erste mal ein benutzerdefinierter Typ. Alles nicht so einfach.

Wäre toll, wenn Dir oder jemand anderem noch was dazu einfällt.


Gruss Jens

Anzeige
Re: Code verkürzen
08.06.2003 22:36:25
andre

hallo jens,
ob es einen "offiziellen" weg gibt, weiss ich noch nicht, aber hier ein inoffizieller:
in ein eigenes modul, z.b modul2, die function (prinzipiell). notwendige variablen dann public ...

Private Function gTeilnehmer()
For i = 0 To gAnzTeilnehmer - 1
If gTeilnehmerLi(i).P5 < 1 Then
ListBox1.AddItem
ListBox1.List(j, 0) = gTeilnehmerLi(i).NN
ListBox1.List(j, 1) = gTeilnehmerLi(i).VN
ListBox1.List(j, 2) = gTeilnehmerLi(i).Geschl
j = j + 1
End If
Next
End Function

und zur verfeinerung vielleicht mit
with userform1.listbox1
.additem
....
end with

in den case teil

With ActiveWorkbook.VBProject.VBComponents("modul2").CodeModule
.ReplaceLine 3, " If gTeilnehmerLi(i).P" & gaktrunde & " < 1 Then"
End With

und anschliessend die function aufrufen. wobei diese 3 zeilen auch als eigene function definiert werden können, sonst wird's ja nicht viel kürzer.

gruss andre




Anzeige
Re: Code verkürzen
08.06.2003 23:02:03
Jens_Pu

Hallo andre,

;-) "inoffiziell"

Sicherlich auch ein Lösungsansatz. Allerdings habe ich so die Vermutung, dass die Lesbarkeit des Codes darunter leidet, weil er nur kurzfristig existiert. ;-)

Bist schon ein Cleverchen. Ich hatte eigentlich mehr an einen offiziellen Ansatz gedacht. Seit ich mich nun mit VBA beschäftige, habe ich in meinen Ideen immer diese Bandwurmcodes verwendet. Die Lösungen mit Zähl-Variablen zusammenbauen etc. habe ich immer bewundert. Nun wollte ich heute auch mal was tolles produzieren, und das scheint so gar nicht zu gehen.
Wenn Dir noch was einfällt kannst Du Dich ja noch mal melden.

Gruss Jens

Anzeige
Re: Code verkürzen
09.06.2003 09:09:33
Nepumuk

Hallo Jens,
ändere deine Typ-Anweisung und deinen Code wie folgt:

Gruß
Nepumuk

Re: Code verkürzen
09.06.2003 09:20:22
andre

... genau das ist es, war auch grad wieder drüber.
gruss andre

Re: Code verkürzen
09.06.2003 09:23:08
andre

... und was ist mit dem gTeilnehmerLi() as Mitglied?
gruss andre

Re: Code verkürzen
09.06.2003 09:30:27
Nepumuk

Hallo Andre,
was soll damit sein, das ist ein dynamisches benutzerdefiniertes Datenfeld.
Gruß
Nepumuk

Re: Code verkürzen
09.06.2003 09:33:51
Jens_Pu

Hallo Nepumuk,

genial. Und, wenn man die Lösung sieht, genial einfach.

Gruss Jens

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige