Automatische Wertannahme für ein leeres Textfeld!

Hi,
FROHES NEUES erstmal :wink:

und nu’ zum Thema:

ich habe eine Userform erstellt mit mehreren Eingabefeldern (txtfeld). Eigentlich klappt das Programm fast so wie ich es wollte, jedoch an ein Probelm stellte sich mir in den Weg… VBA setzt automatisch einen Wert im Textfeld an obwohl dort noch nichts eingegeben wurde. Wieso ? und wie kann ich das umgehen?
hab jetzt erstmal provisorisch im Eigenschaftenfenster des Textfeldes „Value: 0“ eingestellet… aber so soll das nicht sein :smile:

Weitere Fragen:
-Wie kann ich das Ergebnis, welches in einem Label erscheint auf eine bestimmte Nachkommastelle begrenzen?

-Wie kann ich einstellen, dass man nichts in eine Combobox eintippen kann. Oder, dass man vielleicht nur die in der Combobox vorhandenen Werte eintippen kann? Beides würde mich interessieren ;D

Danke schonmal

mfg michi

VBA setzt automatisch einen Wert im Textfeld an obwohl dort
noch nichts eingegeben wurde. Wieso ? und wie kann ich das
umgehen?

Wenn ich richtig rate, hast Du beim Entwerfen Text eingetragen. Der wird beim Ausführen der Form als Vorgabe angezeigt.

hab jetzt erstmal provisorisch im Eigenschaftenfenster des
Textfeldes „Value: 0“ eingestellet… aber so soll das nicht
sein :smile:

Meinst Du eine TextBox oder ein Label?
Lösche alle Zeichen, auch die 0, der Value-Eigenschaft der TextBox.
Oder desgleichen bei der Caption-Eigenschaft des Labels.

-Wie kann ich das Ergebnis, welches in einem Label erscheint
auf eine bestimmte Nachkommastelle begrenzen?

Im Ereignis, das das Ergebnis anzeigt, das Ergebnis so zuweisen: lbl.Caption=Format(blabla,„0,000.00“)
Amerikanische Tausender- und Dezimaltrennzeichen beachten.

-Wie kann ich einstellen, dass man nichts in eine Combobox
eintippen kann. Oder, dass man vielleicht nur die in der
Combobox vorhandenen Werte eintippen kann? Beides würde mich
interessieren ;D

Könnte sein, daß es in verschiedenen Words unterschiedlich ist: bei mir bei in der MatchRequired-Eigenschaft der Combobox.
Ist es aber dann nicht einfacher, eine Listbox zu nehmen? Mir scheint, daß Du eher diese brauchst.

Gruß

M.

hey danke für die Hilfe, aber wenn ich meine Problembeschreibung zu der Textbox jetzt durchlese bemerk ich, dass ich das ruhig mal genauer beschreiben sollte was ich da genau vor hab :smile:

ich habe eine Userform erstellt: auf der einen Seite befinden sich die Eingabefelder (Textbox) und daneben die Ergebnisfelder (Label).
Die Eingabewerte müssen bestimmte DIN-Vorschriften einhalten und bei einer dieser Vorschriften hab ich ein Problem mit dem Programm:
txtbox1 ist abhängig von der txtbox2 und mit einer If-Bedingung im Programm verknüpft- es heißt (kurz) :

if txtbox2.value > 2.75 and txtbox1.value

Hallo Michi,

lad mal eine Beispielmappe hoch mit FAQ:2606

Gruß
Reinhard

Hallo,

hey danke für die Hilfe, aber wenn ich meine
Problembeschreibung zu der Textbox jetzt durchlese bemerk ich,
dass ich das ruhig mal genauer beschreiben sollte was ich da
genau vor hab :smile:

Das ist meistens so, denn nur so kann einem geholfen werden :wink:

ich habe eine Userform erstellt: auf der einen Seite befinden
sich die Eingabefelder (Textbox) und daneben die
Ergebnisfelder (Label).
Die Eingabewerte müssen bestimmte DIN-Vorschriften einhalten
und bei einer dieser Vorschriften hab ich ein Problem mit dem
Programm:
txtbox1 ist abhängig von der txtbox2 und mit einer
If-Bedingung im Programm verknüpft- es heißt (kurz) :

if txtbox2.value > 2.75 and txtbox1.value 0 ist, dann die Prüfung machen!

Bin noch nicht dazu gekommen dein Hilfe anzuwenden, dies wollt
ich jetzt im Anschluss machen, jedoch vorher nochmal genauer
auf das berühmt brüchtigte „Textbox-Problem“ eingehen :open_mouth:

Nochmal ein kleines Fazit:

  • die Textboxen sind leer (Eingabefelder)
  • txtbox2 habe ich provisorisch auf Value = 0 eingestellt, da
  • automatisch für die If-Prüfung ein Wert für die Box
    verwendet wird.

Und genau da sollte es funktionieren :wink:
Aber mal etwas anderes … Du musst in beiden Textboxen diese Prüfung machen, denn der User kann ja erst einen Wert in Textbox 2 eingeben :wink:

Also vielleicht ist das ein doofes Problem, oder man sollte
sowas nicht mit „If“ sondern irgendwie anders im Programm
schreiben… kann alles sein, denn ich bin ein Anfänger… hatte
nur einpaar Vorlesungen zu VBA und soll jetzt als
Abschlussaufgabe ein kleines Programm schreiben.
Ich geb mein bestes :smile:

Möglichkeiten gibt es da viele. Zum Bsp, gleich beim verlassen der Textbox oder bei einer Aenderung, dessen Wert prüfen und dementsprechend agieren.

(…bestimmt tauchen noch mehr Probleme von meiner Seite auf)

danke schonmal für die Hilfe, bis bald

Gruss
mi

MfG Alex

hey hello,
dass die Prüfung erst erfolgt wenn die Textbox einen Wert hat ist wohl das, was ich nicht berücksichtigt habe… :S habe ich auch gerade erst vor 15 Min. bemerkt, als ich durch mein Programm wanderte (was ich schon den ganzen Tag mache :smile: ), aber da ich ein echter Anfänger bin weiß ich mir da nicht zu helfen… wie mach ich sowas?
Hatte wie gesagt nur einpaar Vorlesungen in der Uni zu VBA, wodurch ich nur ganz grob mit VBA umgehen kann…

Ps.: ich bin gerade dabei meine Übung eiwenig aufs Hochladen vorzubereiten… morgen ist sie hochgeladen, dann müsst ihr nicht mit all’ eurer Phanstasie kämpfen, um euch den Aufbau meiner Userform und meines Programms vorzustellen ;-D

mfg Michi

Hey

hey hello,

also von VBA habe ich nicht so die Ahnung, um das mal gleich im Vorfeld zu sagen :wink:

dass die Prüfung erst erfolgt wenn die Textbox einen Wert hat
ist wohl das, was ich nicht berücksichtigt habe… :S habe ich
auch gerade erst vor 15 Min. bemerkt, als ich durch mein
Programm wanderte (was ich schon den ganzen Tag mache :smile: ),

Schaust du dir es denn nicht im Debug Modus an? Denn da haettest du ihn sicherlich gleich bemerkt. Auch wirst du sicherlich noch auf ganz andere Probleme stossen, wo du sicherlich im weitesten Sinne nicht einmal daran denkst :smile: Spontan faellt mir da zum Bsp. die Schreibweise einer Single Zahl ein. Sie wird je nach Einstellung via . oder , dargestellt :wink:

aber da ich ein echter Anfänger bin weiß ich mir da nicht zu
helfen… wie mach ich sowas?

Wie gesagt, es gibt da viele Möglichkeiten! Es kommt auch darauf an, was das Proggi dann machen soll. Also zum Beispiel. Es liegt eine Fehleingabe vor oder es wurde keine Zahl eingegeben oder die Textbox ist leer etc.

Aber ein kleiner Ansatz waere folgender. Lege die Prüfung in eine Funktion. Also Rückgabewert nimm boolean. So weisst du ob die Prüfung erfolgreich war. Willst du später nochmal was aendern, so machst du das dann nur noch in der Funktion und nicht an x Stellen im Proggi :smile:
Prüfe dort halt die gewissen Sachen ab, wie zum Bsp. Wurden Zahlen eingegeben, liegen überhaupt Eingaben vor etc.

Mag vielleicht etwas kompliziert klingen ? Ist es nicht :wink:

Private Sub TextBox1\_AfterUpdate()
If Not Check Then
 'Fehler trat auf ...
End If
End Sub


Private Sub TextBox2\_AfterUpdate()
If Not Check Then
'Fehler trat auf ...
End If
End Sub

Private Function Check() As Boolean
 Check = True
 Select Case True
 Case Len(TextBox1) = 0
 Check = False
 TextBox1.SetFocus
 Case Len(TextBox2) = 0
 Check = False
 TextBox2.SetFocus
 Case CSng(TextBox1.Value) 2.75
 Check = False
 TextBox2.SetFocus
 End Select
 If Not Check Then MsgBox "Fehlerhafte Eingabe ...", 16
End Function

Hatte wie gesagt nur einpaar Vorlesungen in der Uni zu VBA,
wodurch ich nur ganz grob mit VBA umgehen kann…

Ps.: ich bin gerade dabei meine Übung eiwenig aufs Hochladen
vorzubereiten… morgen ist sie hochgeladen, dann müsst ihr
nicht mit all’ eurer Phanstasie kämpfen, um euch den Aufbau
meiner Userform und meines Programms vorzustellen ;-D

Mal nebenbei etwas :smile: Du musst darauf achten, das du Typgerecht arbeitest. Eine Textbox zum Bsp. liefert dir IMMER ein Wert vom Typ STRING. Den musst du erst umwandeln in eine Zahl bevor du vergleiche machst :wink: Auch ist es besser, wenn du dir einschlaegige Namen für deine Steuerelemente und Variablen ausdenkst, denn in einen 1 /2 Jahr weisst du dann nicht mehr, was mal wofür da gewesen ist :smile:

MfG Alex

mfg Michi

dies steht sowohl unter private sub txtbox1 afterupdate als auch unter private sub txtbox2 afterupdate.

Ich habe keine direkte Lösung, kann nur raten. Aber:

Es scheint mir ein logisches Problem zu sein.

  1. Warum verwendest Du _AfterUpdate? _Click oder _Change erscheint mir viel passender. Bist Du Dir wirklich im klaren, wann welches Ereignis auftritt?

  2. Formal erscheint Deine Logik in Ordnung. Wenn die Form abgearbeitet wird, ist zu einem bestimmten Zeitpunkt auch die AND-Bedingung erfüllt (sonst würde die MsgBox nicht erscheinen). Wieso dies, wenn laut Deinem Post keine Eingabe in die zweite Textbox getätigt wurde und die Bedingung für die MsgBox dies aber voraussetzt?

hey,
danke,obwohl ich das nicht ganz geschnallt habe mit der Funktion „Check“. :wink:
Ich habs aber irgendwie hingekriegt und meine kleines Programmchen funktioniert!
Ich habs auch hochgeladen, wär nett wenn ihr mal reinschauen könntet und mir noch Verbesserungsvorschläge macht, denn alles funktioniert leider noch nicht…(erläuter ich gleich)
Nicht über komische Texte im Programm wundern- ich hab viel experimentiert :smile: und wirklich hübsch sieht das ganze noch nicht aus.

also zu meinem letzten Problem:

ich krieg das einfach nicht hin, dass anhand der in den Comboboxen ausgewählten Werte in der Excel-Tabelle ein Wert entnommen wird (hier für „Sigma0“).

Achso was ich auch schon die ganze Zeit im Internet suche ist, wie man das macht,dass meine Userform automatisch mit öffnen der Datei abgespielt wird.

Danke schonmal!

mfg Michi

Ups, hier ist der Link: http://drop.io/j0rguwv#

)

Ok, dass die Userform automatisch startet mit dem Excel Dokument hab ich gerade hingekriegt…bleiben aber noch andere Probleme ;D

Ok, dass die Userform automatisch startet mit dem Excel
Dokument hab ich gerade hingekriegt…bleiben aber noch andere
Probleme ;D

Hallo Bibab,

glaub ich nicht.

Du hast zwar die Prozedur:

Private Sub worksheet_activate()
UserForm.Show vbModeless
End Sub

aber die steht im Modul „Userform“, also wird sie NICHt automatisch ausgeführt.

Wenn gehört sie in das Modul von z.B. „tabelle1“, erst dann wird sie automatisch ausgeführt wenn das Blatt aktiviert wird.

Du willst aber haben daß die UF zu sehen ist wenn die Mappe gestartet wird?
Dann so im Modul „DieseArbeitsmappe“

Private Sub Workbook_Open()
UserForm.Show vbModeless
End Sub

Gruß
Reinhard

Hey,:wink: ich weiß, das in dem upgeloedeten (immerwieder witzig diese deutsch konjugierten englischen Wörte ;D ) Befehl, welches du zitierst gehört zu den von mir erwähnten „Experimenten“. Nach meinem upload hab’ ich erst rausbekommen, wie man einen Autostart programmiert somit ist das in dem Upload nicht enthalten.
sorry war einwenig unklar, aber danke, dass du mal reingeschaut hast. immer wieder nett, wenn man weiss,dass man nicht unbeachtet bleibt hier.

Kannst du mir vielleicht bei dem andern Problem helfen?
Das entnehmen eines Wertes aus der Tabelle. Ich hab da auch etwas wirres stehen, weil ich die Prozedur gefühlte tausend mal überarbeitet hab, da ich schon langsam am Verzweifeln bin…es will einfach nicht klappen :smile:

mfg „bibab“ (danke für den neuen Spitznamen :wink:)

Ich hab jetzt nochmal meine aktuelle Version hochgeladen.
Link ist der selbe:

http://drop.io/j0rguwv#

MfG
Michi

Hallo,

danke,obwohl ich das nicht ganz geschnallt habe mit der
Funktion „Check“. :wink:

das was ich dir gepostet habe, war nur zu demozwecken wie es denn klappen könnte! Aber nun gut. Die Function macht ja ihren Dienst :wink:

Aber was verstehst du denn daran nicht?

Eine Function:

  • Sie kann Parameter entgegennehmen.
  • Sie kann wie eine Prozedure auch je nach dem ob sie ( die Parameter) Byval oder Byref übergeben werden, direkt geaendert werden!
  • Sie koennen aufgerufen werden, wie Prozeduren
  • Sie arbeiten einen Programm Source ab

Soweit ist es ja das selbe wie eine Prozedure!
Nun kommt aber der Unterschied

  • Sie liefern dir ein Ergebnis zurueck, welches man auswerten kann.
    _ Du musst dieser Funktion einen Wert zuweisen

Auf Deutsch heisst das… Du kannst eine Funktion wie eine Variable sehen, die du abfragst. Sprich du hast ne Function z.Bsp. Rechne die 2 Parameter entgegen nimmt. Nennen wir sie a und b

Die Function könnte nun wie folgt ausschauen

Function Rechne(A as Integer, B as Integer) as Integer
Rechne=A+B
End Function

Was macht das nun? Gehen wir mal von aus, du rufst sie nun wie folgt auf. Wir erinnern uns … Funktionen kann man als eine Variable sehen, die man abfragen kann :wink:

Textbox1.Text=Rechne(5,5)

In der Textbox würde nun 10 stehen. Warum ?
Schauen wir uns das mal genauer an :wink:

Wir versuchen der Textbox einen Wert zuzuweisen. Dabei rufen wir ueber Rechne einfach die Funktion auf und übergeben ihr 2mal den Wert 5. Schauen wir nun in die Function
Dort steht

Rechne=A+B

Du siehst das dem Functionsnamen ein Wert zugewiesen wird!
Das bedeutet das die Function den Wert zurueckliefert! Da A und B jeweils 5 sind, wird der Function nun der Wert 10 zugewiesen ( 5+5=10)
Man muss jedoch beachten. Bei der Definition der Function musst du angeben, was sie zurueckliefern soll. Das haben wir ja durch

Function Rechne(A as Integer, B as Integer) **as Integer**

gemacht. Durch das as Integer hinter der Function, sagen wir das sie eine Zahl zurueckliefern soll. Sprich einen Integer :smile:

Wie du siehst, ist es ganz simple :wink: Das man nun die Parameter selbst noch aendern kann, darauf gehe ich mal nicht weiter ein, denn sonst würde ich das Forum hier sprengen *gg*

Zurueck nun zu deinem Program. Ich weiss nicht mehr was ich dir gepostet habe, aber vom Prinzip her, habe ich nach verlassen der Textbox einfach die Function aufgerufen. Willst du einen Wert vergleichen, der vom Typ Boolean ist, so kann man sich nen bissl Arbeit ersparen ( ich bin eigentlich schreibfaul)

If MeineVariable=True then 
'entspricht
If MeineVariable then

IF MeineVariable=False then
'entspricht
if not meineVariable then

Wie du siehst brauchst du nur den Variablennamen ( oder Functionsnamen, wenn sie ein Ergebnis vom Typ Boolean zurueckliefert) angeben um sie auf True zu prüfen. Ich daechte das ich das gemacht habe.

Wenn du nun in die Function schaust, wirst du sehen, das sie an verschiedenen Stellen verscheidene Werte bekommt! Entweder True oder False.
Dann wird einfach die Function verlassen und liefert je nach Eingaben in den Textboxen ein True oder False zurueck, welches wir ja beim verlassen der Textbox abfragen.

Ich daechte mich auch zu erinnern das ich in der Function etwas in der Art alla

Select Case True
Case ....
End Select

geschrieben habe. Die Variante ist für viele unbekannt. Aber was macht sie nun … Select Case überprüft einen Wert und je nachdem was er ist, springt er in die Case Klausel. Ok … aber wieso steht nun dort ein True ?
Das heisst so viel wie Wahr. Sprich. Sobald ein Ausdruck Wahr ( True) ist, springt er in die Case Klausel. Nun schaue dir mal die Case Klauseln an!

Case Len(Textbox1.text)=0 ' Ist die Länge des Stringes in der Textbox 0 ?
case csng(Textbox1.text)\>240 'Der Wert in Textbox1 wird in Single gewandelt 
'und geprüft ob er grösser 240 ist
etc.

So nun erkennst du das ich einfach erst die Längen der Textbox Inhalte abfrage auf 0 und dann versuche zu vergleichen. Ist nun wiederrum ein Inhalt leer so wird die Function zu True und wird verlassen :smile:

Wie du siehst ist es eigentlich simple :wink:

Ich habs aber irgendwie hingekriegt und meine kleines
Programmchen funktioniert!

Ja aber macht es auch das, bei fehlenden Eingaben oder bei Falsch Eingaben?
Dort kannst du die Function erweitern zum Bsp. in dem du den Focus auf das Element setzt was die Fehleingabe beinhaltet oder eine MsgBox aufploppen lassen, mit einer Meldung etc. :wink:

Ich habs auch hochgeladen, wär nett wenn ihr mal reinschauen
könntet und mir noch Verbesserungsvorschläge macht, denn alles
funktioniert leider noch nicht…(erläuter ich gleich)
Nicht über komische Texte im Programm wundern- ich hab viel
experimentiert :smile: und wirklich hübsch sieht das ganze noch
nicht aus.

Wie gesagt, ich hab von VBA fast keine Ahnung :confused: Aber Reinhard hat sich dem Problem ja schon angenommen :wink:

also zu meinem letzten Problem:

ich krieg das einfach nicht hin, dass anhand der in den
Comboboxen ausgewählten Werte in der Excel-Tabelle ein Wert
entnommen wird (hier für „Sigma0“).

Ich würde den Selektierten Eintrag in der Combobox auslesen und daraufhin dann im Exel Sheet ( heisst das so?) die Daten auslesen

Achso was ich auch schon die ganze Zeit im Internet suche ist,
wie man das macht,dass meine Userform automatisch mit öffnen
der Datei abgespielt wird.

Die Sub Workbook_open oder so, würde ich mal vermuten :wink:

Danke schonmal!

mfg Michi

MfG Alex ( der mal Lust hatte ein wenig zu schreiben :wink:

Hi,
wow danke für die Erläuterung :smile: hat das ganze verständlich gemacht.
Aber es funktioniert wirklich so, wie ich es hab und hab es anders gemacht, ganz einfach mit sämtlichen if Prozeduren…vielleicht nicht die schönste Lösung, aber auch ok :wink:

deinen Vorschlaf mit „excel_sheet“ guck ich mir mal eben an.

es dankt und grüßt:
Mi

Hey

Hi,
wow danke für die Erläuterung :smile: hat das ganze verständlich
gemacht.

Nichts zu danken :smile:

Aber es funktioniert wirklich so, wie ich es hab und hab es
anders gemacht, ganz einfach mit sämtlichen if
Prozeduren…vielleicht nicht die schönste Lösung, aber auch ok
:wink:

Mag sein, aber was ist wenn du in 3 Wochen merkst, Mensch fuck, mist da muss noch … dann schreibst die naechste IF Anweisung und dann die naechste und naechste und irgendwann blickst net mehr durch :frowning:

Desweiteren, kommt es darauf an, wie du es geschrieben hast, durchlaeufst du alle IF Abfragen, was aber Unsinn ist, denn wenn 1 Wert schon nicht stimmt, dann willst du ja darauf agieren ;(

Genau für solch einen Falle bietet sich die Select case Anweisung an :wink:

Ich meine sicherlich könnte man auch etwas basteln alla

If Vergleich then
ElseIF Vergleich then
ElseIF Vergleich then
ElseIf Vergleich then
Else
End IF

Das wiederrum würde ein Select Case Geruest entsprechen. Welches man nun macht, liegt an jedem selbst :smile: Ich bevorzuge halt immer Select Case :wink:

Aber by the Way … Vergebe deinen Steuerlementen und Variablen ordentliche Namen, sonst blickst irgendwann nicht mehr durch und das waere aergerlich, wenn 6 Monate Arbeit zum Bsp. umsonst waren :smile:

Ich selbst bastel gerade an einem Project, wo ich auch dachte naja in 3 Wochen biste fertig … Nun sind es schon ca. 14 Monate und knapp 150 Formulare :confused:

MfG Alex

deinen Vorschlaf mit „excel_sheet“ guck ich mir mal eben an.

es dankt und grüßt:
Mi

MfG Alex

ja du hast ja Recht :smile: Select case ist schon was feines und auch für mein Empfinden schöner, aber wie gesagt ich bin ein ECHTER Anfänger und so klein wie mein Programm ist spielt es jetzt auch keine Rolle - bin ja auch mit dem Part schon fertig.
Aber mein nächstes Programm werd ich mal mit select case programmieren.

gute nacht

ja du hast ja Recht :smile: Select case ist schon was feines und
auch für mein Empfinden schöner, aber wie gesagt ich bin ein
ECHTER Anfänger und so klein wie mein Programm ist spielt es
jetzt auch keine Rolle - bin ja auch mit dem Part schon
fertig.

Ich will es dir sicherlich nicht aufdraengeln :smile: Es ist nur ein gut gemeinter Rat. Ich selbst schreibe da aus Erfahrung :frowning:

Aber du musst dir halt immer vor die Augen führen. Egal wie gross das Program ist, egal das wievielte es ist, egal ob man Anfaenger ist oder erfahren. Man sollte immer versuchen den sauberen Stil zu gehen :wink: Denn man weiss nie, was mal in ein paar Monaten ist :smile:

Also beim naechsten Project dann besser machen :wink:

Aber mein nächstes Programm werd ich mal mit select case
programmieren.

gute nacht

Gute Nacht :smile:

MfG Alex

Guten Tag,

Für die, die sich das wirklich angucken, ich hab noch einen Fehler entdeckt und zwar in der Prozedur cmdRechnen_click()
bei If Len (txt Wandlaenge)… ich hab das „d“ von „Wandlaenge“ vergessen ;S

so und nu kann man sich mein kleines Programm auch genauer anschauen.

Das große Problem aus dem Worksheet einen Wert zu importieren hab ich immernoch… es handelt sich hierbei aber nicht einfach nur um das importieren sondern je nach in meinen comboboxen ausgewählten Wert die Zeile und Spalte automatisch finden und dann erst genau diesen Wert importieren… wie man importier weiss ich und den in der Box ausgewählten Wert lass ich mit Hilfe eine For-Schleife finden… die Spalte findet er anhand des Wertes in der einen Combobox aber die Zeile findet er nicht…
Ich weiss einfahc nicht wieso … bei der Übung eines Mitstudenten funktioniert das und er hats genau so gemacht, also hab ich anscheinend irgendwas irgendwo falsch gemacht, aber es lässt sich einfach nicht von mir finden :wink:

also bitte schaut mal rein vllt findet ihr den Fehler, denn in 3 Tagen muss ich die Übung abgeben… ;-S

mfg
Michi