In unten stehendem Prozedurausschnitt soll an Stelle des Feldes 'name' jenes Feld eingesetzt werden,

  • Thread starter Thread starter Hölzl Otto
  • Start date Start date
H

Hölzl Otto

wer kann mir helfen?
'Liste' ist ein Feld von Daten eines benutzerdefinierten Typs mit
verschiedenen Feldern wie 'name', #vorname', 'geburtsdatum' etc. zur
Aufnahme von Personaldaten
Die Feldnamen werden in ein Listenfeld eingelesen ,der ausgewählte Feldname
wird in eine globale Variable 'sortierKriterium' übernommen . In unten
stehendem Prozedurausschnitt soll an Stelle des Feldes 'name' jenes Feld
eingesetzt werden, das in der Variablen sortierKriterium steht.
Besten Dank für einen hilfreichen Tipp
Otto Hölzl

.......
For i = 1 To j
If Liste(i).name > Liste(i + 1).name Then
Flag = True
hilf = Liste(i): Liste(i) = Liste(i + 1): Liste(i + 1) = hilf
End If
Next i
.......
 
wer kann mir helfen?
'Liste' ist ein Feld von Daten eines benutzerdefinierten Typs mit
verschiedenen Feldern wie 'name', #vorname', 'geburtsdatum' etc. zur
Aufnahme von Personaldaten
Die Feldnamen werden in ein Listenfeld eingelesen ,der ausgewählte Feldname
wird in eine globale Variable 'sortierKriterium' übernommen . In unten
stehendem Prozedurausschnitt soll an Stelle des Feldes 'name' jenes Feld
eingesetzt werden, das in der Variablen sortierKriterium steht.
Besten Dank für einen hilfreichen Tipp
Otto Hölzl

......
For i = 1 To j
If Liste(i).name > Liste(i + 1).name Then
Flag = True
hilf = Liste(i): Liste(i) = Liste(i + 1): Liste(i + 1) = hilf
End If
Next i
......

Interesting conundrum. I'm pretty sure what you want is not directly
possible. You have to consider a different approach.

Make a two-dimensional array of type Variant:
ReDim Liste(1 To j, 1 To 3) As Variant
Liste(1, 1) = "Hölzl"
Liste(1, 2) = "Otto"
Liste(1, 3) = CVDate("1-Apr-1983")

You then have to translate the content of sortierKriterium to the
appropriate index number for Liste, either by lookup from a table or by
multiple If or Case statements. Suppose you call that variable idxKrit.
Then your sort routine might look like this:

For i = 1 To j
If Liste(i, idxKrit) > Liste(i+1, idxKrit) Then
Flag = True
For k = 1 To 3
hilf = Liste(i, k)
Liste(i, k) = Liste(i + 1, k)
Liste(i + 1, k) = hilf
Next k
End If
Next i

However, the whole operation would probably be much more efficient if you
dumped the array to a sheet, made on the fly, and used Excel's sort
facilities there. Writing/reading arrays to/from worksheets is extremely
fast when used this way:
..Range(Cells(1, 1), Cells(j, 3)) = Liste
and
Liste = .Range(Cells(1, 1), Cells(j, 3))
 
Back
Top