AW: Noch einmal- die UDF's von Luc eingebaut?
26.07.2016 17:42:40
Luc
Hallo Robert,
jetzt hat es schon mal einen kleinen "Klick" in meinem Kopf gegeben.
Ich hatte die UDF`s natürlich nicht eingebaut(Mir war bisher der Begriff UDF neu und ich dachte die Formel sei die UDF).
Jetzt habe ich versucht die UDF`s einzubetten und stehe wieder vor einer Wand...
Ich habe, wenn ich das ganze richtig Blicke jetzt folgendes eingefügt:
Option Explicit
Public Enum cxTriState: cxAsUsed = -2: cxRTrue: cxFalse: cxPTrue: End Enum
Rem Verbinden aller Elemente 1es belieb Vektors
' (Arg3 fehlt/0) bzw 1er Matrix (Arg3>0/
' Arg1: ZBereich or DatenFeld (aus Ausdruck);
' Arg2: BindeTxt - fehlt LeerZchn, leer ohne,
' Fwert lokListTrenn; Arg3: fehlt/0/
' ±1 ohne leere u.Wdholgg, -1 ganze Elemente,
' -2 alle ganzen ohne leere, >0 auch Element-
' Teile, abhängig v.ihrer AuftrittsReihfolge.
' Achtung! Benötigt Enum[eration] cxTriState!
' Vs1.4 -LSr -cd:20130904 -1pub:20130905herber -lupd:20150716n
Function VJoin(Bezug, Optional ByVal BindeZ, Optional ByVal NurUngl As cxTriState)
Dim lix As Long, pix As Long, erg, xBez As Variant
On Error Resume Next: NurUngl = Sgn(NurUngl) + CInt(NurUngl "" Then
pix = 0: pix = .Match(xBez, erg, 0)
If pix = 0 Then ReDim Preserve erg(lix): _
erg(lix) = xBez: lix = lix + 1
ElseIf xBez "" Then
erg(0) = xBez: lix = lix + 1
End If
ElseIf Not IsEmpty(erg) Then
If NurUngl = cxAsUsed Or (xBez "" And _
InStr(erg, xBez) = 0) Then erg = erg & BindeZ & xBez
ElseIf xBez "" Then
erg = xBez
End If
Next xBez
ElseIf IsError(LBound(Bezug, 2)) Then
erg = Join(Bezug, BindeZ)
Else: Bezug = .Transpose(Bezug)
If IsError(LBound(Bezug, 2)) Then
erg = Join(Bezug, BindeZ)
Else: erg = CVErr(xlErrRef)
End If
End If
End With
If NurUngl = cxRTrue Then VJoin = Join(erg, BindeZ) Else VJoin = erg
End Function
Rem MatrixFmlFähig Splitten (ggf in 1zelZchn - Arg2="") m.Umwandl v.TextZahlen in inZahl;
' wenn nicht alle Werte in Arg1-DFeld gleichlg sind, kann ggf F-Wert zurückgegeben wdn!
' Vs1.1 -LSr -cd:20130904 -1pub:20130905herber -lupd:20130904n
Function VSplit(Bezug, Optional ByVal TrennZ As String = " ", Optional inZahl As Boolean)
Dim ix As Long, p As Long, TrZ As String, bez, erg, vx, zwErg As Variant
On Error Resume Next
If IsArray(Bezug) Then
bez = Bezug: TrZ = TrennZ: ReDim erg(UBound(bez) - LBound(bez))
For Each Bezug In bez
Go
Sub eb: p = 0: TrennZ = TrZ: erg(ix) = VSplit: ix = ix + 1
Next Bezug
VSplit = erg: Exit Function
End If
eb: If TrennZ = "" Then
TrennZ = Chr(0): Bezug = CStr(Bezug)
While p
Wobei Ich natürlich beide UDF`s in seperaten Modulen habe. Aber natürlich funktioniert es nach wie vor nicht. Meine Synapsen in Sachen Excel sind wohl noch nicht ausreichend verknüpft. Wahrscheinlich sind das die verkehrten UDF`s die ich da genutzt habe.
Na ja, wie schon erwähnt muß ich wohl noch seeeehrt viel lernen in Sachen Excel.
Um Euch nicht noch weiter mit meiner Unwissenheit auf den Wecker zu gehen habe ich jetzt zu einer Notlösung gegriffen:
Ich habe in der Registerkarte Personal einen Namen angelegt. Dieser besteht nur aus einem Leerzeichen. Diesen Namen habe ich dann Mit einem x der Wachabteilung zugeteilt und die Namen wieder alphabetisch sortiert. Hierdurch steht er ganz oben. Da dieser "Dummy" ja nie in den Drop Down Feldern ausgewählt wird findet die Funktion "joinen" auch immer einen Eintrag (nämlich das Leerzeichen) und gibt mir somit keine Fehlermeldung aus. Die beiden Namen in den "Verfügerzellen" werden somit auch immer angezeigt.
Ich weiß... das ist natürlich schön gefuddelt und befriedigt mich und vor allem meinen Ehrgeiz überhaupt nicht. Im Grunde ärgere ich mich schon die ganze Zeit über meine doch minimalistischen Kenntnisse in Excel.
Aber ich gelobe in sofern Besserung, das ich bei einer nächsten Frage hier im Forum ganz sicher meine Kenntnisse in Excel nicht mehr als "gut" einstufe...
Vielen Dank für Eure Geduld.
Gruss Udo