5Danke
ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
3449
3449
EMPFEHLEN
-
29.12.10 01:59 #1
Hallo Kommunity,
ich sitze seit Jahren mal wieder an nem kleinen VBA-Projekt (Excel 2007).
Ich habe ein Bezeichnungsfeld mit einem Wert. Ich möchte, wenn ich eine Zahl in mein Textfeld geschrieben habe, diese erst bei Bestätigung von Enter von dem Wert des Bezeichnungsfelds abgezogen wird.
Momentan fängt er an zu rechnen, sobald ich die erste Zahl eintippe.
Hier mein Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Option Explicit Private Sub TextBox1_change() Dim w As String w = TextBox1.Value If w = "" Or w Like "####" Then Exit Sub If w >= "0" Or w <= "180" Then Label1.Caption = Label1.Caption - CLng(w) TextBox1.Value = "" Else MsgBox "Bitte einen korrekten Wert eingeben!" End If End Sub
Finde einfach nicht den Fehler. Ja gegoogelt und geSuFut hab ich schon wie nen Verrückter.
Kann mir wer nen kleinen Tipp geben?
MFG- MfG waswiewo
-
29.12.10 08:16 #2
Das KeyChange-Event ist dafür denkbar ungeeignet, da du hier die gedrückte Taste nicht abfragen kannst. Besser geht es mit dem KeyDown-Event, dein Code würde so aussehen:
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Option Explicit Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then '13 steht für die gedrückte Enter-Taste Dim w As String w = TextBox1.Value If w = "" Or w Like "####" Then Exit Sub If w >= "0" Or w <= "180" Then Label1.Caption = Label1.Caption - CLng(w) TextBox1.Value = "" Else MsgBox "Bitte einen korrekten Wert eingeben!" End If End If End Sub
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
-
29.12.10 14:01 #3
Hey!
Ich danke dir, funktioniert einwandfrei!
###EDIT: Habe noch eine Frage:
Ich habe 4 Do - Schleifen. Jede fragt einen Namen ab .. das klappt auch alles. Aber leider nur bis der 4te Name eingetragen wurde und ich mit OK bestätige. Danach kommt die Fehlermeldung: Laufzeitfehler 424 - Objekt erforderlich. Nur weiß ich nicht welches. Google sagt mir auch nichts gescheites.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
Option Explicit Private Sub startdart501_Click() Dim sp As Variant Dim eins As Variant Dim zwei As Variant Dim drei As Variant Dim vier As Variant eins = dart501.Label5.Caption SpAnz: sp = Application.InputBox("Bitte Spieleranzahl eingeben.", "Spieleranzahl", , Type:=1) Do If sp < 1 Or sp > 4 Then GoTo SpAnz Loop Until sp = 1 Or sp = 2 Or sp = 3 Or sp = 4 If sp = 4 Then Name1: eins = Application.InputBox("Bitte ersten Namen eingeben.", "Erster Spielername", , Type:=2) Name2: zwei = Application.InputBox("Bitte zweiten Namen eingeben.", "Zweiter Spielername", , Type:=2) Name3: drei = Application.InputBox("Bitte dritten Namen eingeben.", "Dritter Spielername", , Type:=2) Name4: vier = Application.InputBox("Bitte vierten Namen eingeben.", "Vierter Spielername", , Type:=2) Do If eins = "" Then GoTo Name1 Loop Until eins.IsText Do If zwei = "" Then GoTo Name2 Loop Until zwei.IsText Do If drei = "" Then GoTo Name3 Loop Until drei.IsText Do If vier = "" Then GoTo Name4 Loop Until vier.IsText NextUserForm.Show End If End Sub
MFGGeändert von waswiewo (30.12.10 um 01:07 Uhr)
- MfG waswiewo
-
30.12.10 09:32 #4
Der Fehler ist klar, der Fehler kommt in der Zeile
und eigentlich auch in den weiteren Zeilen gleichen Typs. Du versuchst da einer Variant-Variable eine Eigenschaft zuzuweisen.Code vb:1
Loop Until eins.IsText
Wenn ich mir aber deinen gesamten Code hier so ansehe, kommt mir eigentlich das kalte Grauen, Do/Loops und Sprungmarken für eine einfache Namenseingabe, klarerweise dass du da die Übersicht verlierst.
Ein kleiner Tipp: Wenn du ja schon die Anzahl der Spieler abfragst, geh die Eingabe dann in einer For/Next-Schleife durch, und speichere die Namen in einem Array. Der Code für dich würde dann etwa so aussehen:
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Option Explicit Private Sub startdart501_Click() Dim sp As Integer, cnt As Integer, Result As String, bError As Boolean, sSpieler() As String 'sSpieler beinhaltet die Spielernamen bError = False sp = Application.InputBox("Bitte Spieleranzahl eingeben.", "Spieleranzahl", , Type:=1) If sp > 4 Then sp = 4: MsgBox "Maximal 4 Spieler! 4 Spieler werden angenommen!" ReDim sSpieler(sp) sSpieler(1) = dart501.Label5.Caption For cnt = 1 To sp If bError Then bError = False: MsgBox "Bitte einen Namen eingeben!" Result = Application.InputBox("Bitte " & cnt & " Namen eingeben.", cnt & " Spielername", , Type:=2) If Result = "" Then bError = True: cnt = cnt - 1 Else sSpieler(cnt) = Result Next cnt NextUserForm.Show End Sub
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
-
01.01.11 13:30 #5
Absolute Spitzenklasse! Vielen Dank für deine großartige Hilfe!
Ein Problem(chen) hab ich nun. Versuche schon seit einigen Stunden einen Sverweis zu machen. Das Problem hierbei ist, dass die Daten nicht in einer Tabelle stehen sollen (Habe die Datei als *.xaml gespeichert, ohne Arbeitsblatt). Kann man diese in ein Mudul schreiben und diese mit einem Sverweis abfragen? Oder ist es besser, die Dateien aus einer externen Excel-Tabelle zu laden?
Ein anderes Problem gibt sich, wenn ich versuche die Eingaben der TextBox zu zählen um anschließend den Mittelwert in einem weiteren Label auszugeben. Dies ist aber nur ein Sekundär Problem =)
Nachtrag:
Und warum kann ich nach einer Fehlermeldung den Focus nicht in TextBox1 lassen? Er springt automatisch in die 2te Textbox.
Auch
Code :1 2
TextBox2.SetFocus TextBox1.SetFocus
funktioniert nicht.
Zweiter Nachtrag:
Habe nun rumprobiert und die TabStop-Funktion benutzt. Damit gehts!
Dritter Nachtrag:
Wenn ich auf Enter drücke, ohne dass etwas eingegeben wurde, dann kommt auch eine Fehlermeldung "Typen unverträglich"! "w = TextBox1.Value" wird dann gelb markiert. Kann man das umgehen?
MFGGeändert von waswiewo (01.01.11 um 16:55 Uhr)
- MfG waswiewo
-
01.01.11 19:54 #6
Ich hab jetzt kein Excel da zum testen, eine Textbox wird aber normalerweise über .Text angesprochen und nicht über .Value.
Code vb:1
w = TextBox1.Text
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
-
06.01.11 20:47 #7
Hi
Das hab ich auch schon versucht. Das Problem ist, dass ich kein Text in dm Feld haben will. Es werden nur Zahlen eingetragen. Wenn das Feld leer ist, also "", dann soll eine Fehlermeldung kommen. Dies klappt, wenn ich die TextBox als Variant deklariere, dann kann ich aber die Zahlen 20, 30, 40, etc nicht eingeben... Das selbe mit String - kein Plan warum. Wenn ich als Integer deklariere, dann klappt's mit allen Zahlen bestens, aber nicht, wenn das Feld leer ist und ich Enter drücke. Dann kommt nämlich die Meldung "Typen unverträglich".
Ich mein, es geht auch so, nur wenn man aus versehen mal die Entertaste drückt, ohne was einzugeben vorher, dann stürzt es immer ab.
Komisch, komisch ..- MfG waswiewo
-
07.01.11 08:43 #8
Eine Textbox als Variant oder Integer? Eine Textbox ist eine Textbox, in welche Variable du den Inhalt ausliest, hat nichts mit der Textbox allgemein zu tun.
Um zu prüfen, ob eine Textbox leer ist, verwendet man
Code vb:1
If Text1.Text = "" Then 'Textbox hat keinen Inhalt
Wenn du verhindern willst, dass in deiner Textbox etwas anderes als Zahlen eingegeben werden, kannst du das KeyPress-Event verwenden:
Code vb:1 2 3
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End Sub
Alternativ kannst du den Wert der Textbox auch mit Val() in eine Zahl umwandeln, Val() wandelt alles bis zum ersten alphanumerischen Zeichen in eine Zahl um und ignoriert alles dahinter (z.B. "12g65" wird zu 12).
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
-
08.01.11 17:13 #9
Dies funktioniert alles prima, danke!
Mein letztes Problem bereitet mir ein Verweis in eine fremde Excel Datei.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Private Sub sverweis() If Label1.Caption > 2 Or Label1.Caption < 171 Then Dim objExcel As New Excel.Application Dim objSheet As Object objExcel.Workbooks.Open ("E:\VBA Projekte\Dart Rechner\" & "finishes.xlsm") Set objSheet = objExcel.Sheets("Tabelle1") fsp1.Caption = WorksheetFunction.VLookup(Label1.Caption, objSheet.Range("A1:B169"), 2, False) End If End Sub
Also, wenn im Label1 eine bestimmte Zahl steht soll er in der oben genannten Datei den Wert zu der Zahl suchen und in fsp1 wiedergeben. Macht er aber nicht
Das Label fsp1 bleibt einfach leer.
Hab ich irgend etwas vergessen? Also die Pfadangaben sind alle richtig.
##### -- EDIT -- #####
Habe jetzt ein wenig weiter geforscht und folgendes probiert
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Private Sub UserForm_Activate() Dim objExcel As New Excel.Application Dim objSheet As Object Dim varSuchbegriff As Variant If Label1.Caption > 2 Or Label1.Caption < 171 Then varSuchbegriff = Val(Label1.Caption) Else varSuchbegriff = Label1.Caption On Error Resume Next objExcel.Workbooks.Open ("E:\VBA Projekte\Dart Rechner\" & "finishes.xls") Set objSheet = objExcel.Sheets("Tabelle1") fsp1.Caption = WorksheetFunction.VLookup(varSuchbegriff, objSheet.Range("A1:B169"), 2, False) If Err.Number <> 0 Then fsp1.Caption = "" On Error GoTo 0 End Sub
Dies funktioniert! Die Daten aus der externen Excel-Datei werden auch angezeigt.
Nur leider funktioniert dies nur ein einziges Mal. Und zwar wenn die Userform gestartet wird. Wie lautet denn der Sub-Befehl den ich anwenden muss? Habe schon alles mögliche versucht.
Ich möchte es ca. so haben: Sub TextBox1.Focus() also jedes Mal wenn der Cursor in der Textbox ist.
MfGGeändert von waswiewo (09.01.11 um 14:52 Uhr)
- MfG waswiewo
-
10.01.11 10:27 #10
Bei Excel-VBA heißt das Ereignis nicht Focus() oder GotFocus() sondern Enter():
Code vb:1 2 3
Private Sub TextBox1_Enter() 'Dein Code End Sub
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
Ähnliche Themen
-
C.O.F.F.E.E (Zahlen verarbeiten)
Von street4 im Forum Cinema 4DAntworten: 2Letzter Beitrag: 11.05.10, 17:03 -
[C#] Wert einer Textbox nach Enter an Listbox
Von Mettbrot im Forum .NET Windows FormsAntworten: 5Letzter Beitrag: 15.09.09, 20:39 -
C-Programmieren: Zahlen mit Leerzeichen einlesen und verarbeiten
Von kingmar im Forum C/C++Antworten: 4Letzter Beitrag: 17.03.09, 00:35 -
Nach dem druecken von Enter in der Textbox verschwinden alle Elemente auf dem Tab
Von baeman im Forum VisualStudio & MFCAntworten: 4Letzter Beitrag: 15.04.05, 04:24 -
Enter in textbox drücken->Funktion ausführen VC++ .net
Von Test im Forum VisualStudio & MFCAntworten: 9Letzter Beitrag: 11.12.03, 10:04





Zitieren

Login





