Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1332to1336
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
prüfen ob Eingabe Binärzahl ist
12.10.2013 18:09:08
Uwe
Hallo zusammen,
hab mir eine UF gebastelt bestehend aus einem Textfeld und einem Command_Button.
Im Textfeld wird ein Binärcode eingegeben. Mit Click auf den CButton wird dieser in eine Dezimalzahl umgewandelt und im Label ausgegeben. Die Prüfung, ob die Eingabe nummerisch ist, hab ich hinbekommen, aber ob es sich bei der Eingabe wirklich um einen Binärcode handelt hab ich damit nicht geprüft.
Die Frage ist nun: Wie prüfe ich, ob es sich um einen Binärcode handelt?
So sieht es bis jetzt aus:
Private Sub CommandButton2_Click()
If Not IsNumeric(TextBox2.Text) And TextBox2.Text > "" Then
MsgBox "Bitte nur Zahlen eingeben!", vbCritical
TextBox2 = ""
TextBox2.SetFocus
Exit Sub
End If
Label8.Caption = BinToDez(TextBox2.Value)
End Sub
Hat da jemand eine Lösung? Bei der Recherche konnte ich nichts passendes finden.
VG Uwe

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: prüfen ob Eingabe Binärzahl ist
12.10.2013 18:51:20
ass
Hallo Uwe
wenn du diese nimmst:
Public Function BinaerZuDezimal(BinaerString As String) As Long
' Peter Haserodt 2004
Dim i As Integer
For i = Len(BinaerString) To 1 Step -1
BinaerZuDezimal = BinaerZuDezimal + Val(Mid(BinaerString, i, 1)) * 2 ^ (Len(BinaerString)  _
- i)
Next i
End Function

dann gibt die Funktion Emphty zurück
Gruß
Rudi

AW: prüfen ob Eingabe Binärzahl ist
12.10.2013 19:05:10
Uwe
Hallo Rudi,
meine VBA Kenntnisse sind eher bescheiden. Kannst du mir bitte sagen wie und wo ich das in meinen Code einbaue?
VG Uwe

AW: prüfen ob Eingabe Binärzahl ist
13.10.2013 04:42:57
ass
okay, ich hatte BinToDez mit Bin2Dec verwechselt.
Antwort von Luc ist also fast perfekt.
Vielleicht sollte zusätzlich noch geprüft werden:
If len(TextBox.text) > 0 and not IsNull(TextBox.text) Then ...
Zusätzlich kannst du KeyPress-Event prüfen, was der User eingegeben hat.
So wird nur noch die Eingabe von 0 und 1 zugelassen.
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
'nur 0 und 1 zulassen
Case 48 , 49
'Zeichen sind zulässig - nichts machen
Case Else
'Alle anderen Zeichen unterdrücken
KeyAscii = 0
End Select
End Sub
Gruß
Rudi

Anzeige
Da musst du prüfen, ob die Zahl nur aus ...
12.10.2013 18:58:20
Luc:-?
…0en und 1en besteht, Uwe;
zB so If CBool(Len(Replace(Replace(TextBox2.Text, "0", ""), "1", ""))) Then Err.Raise …
Allerdings kann man so eine DezimalZahl 110 nicht von der Binärzahl für 6 unterscheiden. Evtl solltest du deshalb verlangen, dass BinärZahlen wie ganz früher üblich als LLO bzw llo eingegeben wdn.
Gruß Luc :-?

Danke Luc...
12.10.2013 19:10:50
Uwe
genau das wollte ich erreichen.
Schönes WE noch.
VG Uwe

Bitte sehr, Uwe! owT
13.10.2013 01:39:36
Luc:-?
:-?

@Luc ich nochmal...
13.10.2013 12:11:58
Uwe
Hallo Luc,
ich muß nochmal nerven :-)
gibt's eine ähnliche Prüfung auch für HEX? Ich meine das geprüft wird ob wirklich nur 0-9 bzw. A-F ins Textfeld eingetragen wurde?
VG Uwe

Anzeige
Ja, sicher, analog, und natürlich auch gleich ...
13.10.2013 15:24:10
Luc:-?
…bei Eingabe, Uwe,
so wie es Rudi ja schon gezeigt hat. Alternativ: If IsError(Hex(…)) Then …
Bei Eingabe auch mit Like-Operator:
If Not … Like "[0-9A-Fa-f]" Then … bzw ohne Not andersherum.
Gruß + schöSo, Luc :-?

AW: Ja, sicher, analog, und natürlich auch gleich ...
13.10.2013 16:01:50
Uwe
Hallo Luc,
bei Eingabe geht nicht, da über die selbe Textbox noch dezimale und binäre Zahlen umgerechnet werden. Habe mich für die Variante "If IsError(Hex(…)) Then …" entschieden, aber da springt der Debugger an. (Typen unverträglich)
Private Sub CommandButton4_Click()
TextBox2 = UCase(TextBox2)
If IsError(Hex(TextBox2.Value)) Then
MsgBox "geht nicht", vbCritical, "Eingabe prüfen..."
TextBox2.SetFocus
Exit Sub
End If
Label8.Caption = CDec("&H" & TextBox2.Value)
End Sub
Was mache ich falsch?
VG Uwe

Anzeige
Na klar passiert das, wenn die Eingabe ...
13.10.2013 17:41:35
Luc:-?
…nicht dezimal ist, Uwe;
hätte ich dazuschreiben sollen, aber damit ist immer noch nicht gesagt, dass sie auch hexadezimal ist. Man kann auch, wie bei binär, nur verhindern, dass ungültige Ziffern (hier auch A-F als „Ziffer“) enthalten sind. Mit Like kann man das eigentlich nur für jeweils ein Zeichen sinnvoll tun. Also müsste damit der ganze String durchlaufen wdn.
Aber statt Hex verwende besser die WorksheetFunction.Hex2Dec. Die war früher nicht im WorksheetFunction-Objekt, weshalb ich da nicht immer gleich dran denke. Dadurch entsteht der Fehler 2036 (xlErrNum = #ZAHL!), falls die Angabe nicht als hexadezimal interpretiert wdn kann.
Natürlich musst du den ggf entstehenden Fehler noch abfangen, damit sich der Debugger nicht meldet, On Error Resume Next davor und danach wieder On Error GoTo 0 u/o generell eine Fehlerbehandlung im Pgm vorsehen.
Gruß Luc :-?

Anzeige
AW: Na klar passiert das, wenn die Eingabe ...
14.10.2013 09:12:59
Uwe
Habe es nun anders gelöst und noch eine Textbox hinzugefügt und mit Key_press ungültige Zeichen blockiert. Die zweite Textbox wollte ich zwar eigentlich vermeiden aber egal... es funktioniert.
Danke Luc und Rudi für eure Unterstützung.
Schöne Woche wünsche ich.
Uwe

Na dann, bitte sehr...! Dito schöWo! owT
14.10.2013 14:29:35
Luc:-?
:-?

AW: Ja, sicher, analog, und natürlich auch gleich ...
13.10.2013 20:55:35
uwe
Hi Luc,
ich gebs auf, bekomme es nicht hin. Muss ich halt mit dem Debugger leben und hoffen das niemand ungültige Buchstaben eingibt.
Trotzdem 1000Dank für deine Mühe.
VG Uwe

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige