Hallo liebe Leute,
da ich hier ein paar Probleme habe und es anscheinend keine optimalen Lösungen dafür gibt (zumindest nach etlichen Stunden Google und Forumsdurchforsten), würde ich doch gerne mal hier versuchen die Fragestellung auf den Punkt zu bringen. Entgegen jeglicher Logik (EVA-Prinzip) poste ich hier mal meinen Code zum Eingeben der Werte durch den User und erkläre weiter unten meine Intention (Ein paar von euch kennen ja bereits miene abstruse und völlig verwirrte Vorgehensweise ):
Function EingabefktTyp4(z1, z2, x1, y1, ParamArray parray() As Variant) As String
If z1 <> "" And z2 <> "" Then 'red2
If IsArray(x1) Or IsArray(y1) Then 'red3
If IsArray(x1) And IsArray(y1) Then 'red4
If UBound(parray()) <> -1 Then 'blue1
EingabefktTyp4 = "Zu viele Parameter"
End
Else 'red5
If x1(1) = "" Or y1(1) = "" Then 'blue2
EingabefktTyp4 = "Zu wenig Parameter"
End
Else 'red6
'MsgBox x1.Count
'MsgBox y1.Count
If x1.Count = y1.Count Then 'blue3
'HIER RECHNEN MIT RANGES!
'MsgBox "rechnung mit ranges"
EingabefktTyp4 = x1(x1.Count) & y1(y1.Count)
Else 'blue4
EingabefktTyp4 = "Ranges nicht gleich groß!"
End
End If
End If
End If
Else 'blue5
If IsArray(x1) = False Then 'blue 5,5
EingabefktTyp4 = "x1 ist kein Rangeobject"
End
End If
If IsArray(y1) = False Then ' blue 5,6
EingabefktTyp4 = "y1 ist kein Rangeobject"
End
End If
EingabefktTyp4 = "x1 und y1 müssen Range oder Einzelwert sein, Paramarray muss dabei leer gelassen werden!"
End
End If
Else 'red 7
'MsgBox "red7"
If x1 <> "" And y1 <> "" Then 'red8
If UBound(parray()) <> -1 Then 'blue6
EingabefktTyp4 = "zu viele Parameter"
End
Else 'blue7
'Rechnung mit einzelwerten x1, y1
'MsgBox "Rechnung mit einzelwerten"
EingabefktTyp4 = (x1 & y1)
End If
Else 'red8,5
'MsgBox (UBound(parray))
If x1 <> "" Or y1 <> "" Then 'blue7,5
EingabefktTyp4 = "x1 und y1 müssen für die Verwendung von Parray beide leer sein!"
End
Else 'red9
If UBound(parray()) <> -1 Then 'red10
'MsgBox "red10"
If (((UBound(parray) + 1) Mod (2)) = 0) Then 'blue8
'Rechnung mit Paramarray!
'MsgBox "rechnung mit paramarray"
EingabefktTyp4 = parray(UBound(parray()))
Else 'blue9
EingabefktTyp4 = "Parameterzahl ungerade"
End
End If
Else 'blue10
EingabefktTyp4 = "zu wenig Werte"
End
End If
End If
End If
End If ' ??? von red 8,5
Else 'blue11
EingabefktTyp4 = "z1 oder z2 falsch"
End
End If
Exit Function
'error1:
EingabefktTyp4 = "In den Feldern X1, Y1 müssen immer Werte stehen. Falls keiner eingestzt werden soll, bitte "" verwenden!"
End Function
Falls sich jemand wundert, warum da hintendran immer red und blue steht, ich habe mir einen PAP erstellt und die If-schleifen mit rot und die Anweisungen mit blau markiert.
Auf Anfrage lade ich diesen auch gerne irgendwie hoch oder Maile ihn zu. Das Problem dabei ist nur, dass ich hier nur schlecht Files sharen kann, da diesbezügl. fast alle Seiten gesperrt sind und das Problem wahrscheinlich auch so schon erkannt werden kann.
Der Code dient dazu entweder x1 und y1 (als Ranges, also Arrays oder einfache Werte) oder das Paramarray zur initialisierung zu benutzen. Mir ist auch klar, dass im Falle der Benutzung des Paramarrays immer " "" " in x1 und y1 geschrieben werden muss.
Die Parameter z1 und z2 sind immer auszufüllen.
Der Code sollte jetzt eine Meldung ausgeben, falls der Benutzer mit dem Funktionsassistent Werte falsch eingibt.
Das funktioniert ja auch so weit ganz gut, jedoch ist die Msgbox wirklich sehr nerfig, da sie sich ständig mehrmals öffnet.
Ich habe hier der Einfachheit halber die eigentlich Funktion immer nur duch einen Kommentar ("Hier Rechnung mit blabla") erstezt um das Ganze übersichtlicher zu gestalten. Es geht mir wie gesagt nur darum, dem Endbenutzer das Ausfüllen der Felder im Wizard zu erleichtern. Für die eigentliche Funktion habe ich auch schon eine eigene Kategorie mit Erklärungen zu den Funktionen erstellt, darum geht es mir hier also nicht. (Falls da jemand wissen will poste ich es gerne, aber es gibt dazu schon hunderte Beiträge im WWW)Jetzt also zur eigentlichen Frage. Wie kann ich dem Benutzer eine falsche Eingabe mitteilen ohne sehr viele penetrante Messageboxes zu erhalten.
Ich habe auch schon die Variante gewählt, in der sich die Msgbox nach einer Sekunde schliesst (auch wirklich keine elegante Variante) und versucht den Assistent (Also den Hund oder die Klammer), bzw. einen Balloon Popup zu benutzen (beides scheint in Office 2010 nicht mehr möglich zu sein)
Dadurch könnte der user nämlich einfach fleissig weiter eingeben ohne bei seiner Eingabe ständig unterbrochen zu werden.
Einen Kommentar mit Korrekturtext einzublenden funktioniert anscheinend auch nur, falls man die Fkt bereits richtig eingegeben hat.
Und den "Hilfspopup" (=Helptag glaube ich) wie bei den Standartfunktionen einzublenden funktioniert bei allem aktuellen Versionen von Excel auch offensichtlich nicht (fremde Addons will ich nicht einbinden).
Hat vielleicht jemand von euch noch eine Idee, wie ich die Infos an den/die Mann/Frau bringe, ohne dass 1000mal eine Msgbox kommt die den Benutzer verrückt macht?
Von Textboxes habe ich leider wenig Ahnung, viell. kann man damit was machen, bin gerne bereit mir neues anzueignen.Ich habe da über Google auch schon diverses gefunden, aber nicht wirklich verstanden.
Ich bedanke mich schon mal im Vorraus für alle Meldungen und hoffe damit viell. ein wenig Klarheit zu schaffen, auch für Andere die auf der selben Suche sind, (scheinen nämlich viele zu sein) aber auch nicht wirklich Ahnung haben, von dem was sie machen.
In diesem Sinne
Gruß Manuel
|