Exceptions für Zelleingaben

  • Excel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Exceptions für Zelleingaben

    Hallo liebe User,

    da ich nun mein kleines Programm rein funktionell fertig habe, fehlen noch die Feinheiten. Leider wurde ich über die Suche bei Google, noch hier im Forum fündig, wie ich eine If-Abfrage gestalten muss, damit ein Fehler ausgegeben wird, sobald der Benutzer keine natürliche Zahl, welche unteranderem nicht größer sein darf, als die "Bandbreite" eines Longs, eingibt. Das soll also heißen, dass kein Datum, kein String, keine Kommazahlen oder Sonstiges was einer natürlichen Zahl nicht entspricht eingegeben werden darf.
    Wie würdet ihr das implementieren?

    Desweiteren würde ich gern wissen, wie ich zum Start des Makros, erst einmal alle Zellen in Excel formatiere und sie dann mit Strings, sowie den berechnenden Funktionen füllen kann?

    Mit freundlichem Gruß ;(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kachimbo“ ()

    1. Sie soll in eine Excel-Zelle eingegeben werden.

    2. Das stimmt, habe ich bereits auch gemacht, jedoch wird es beim Start des Programms nicht automatisch ausgeführt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kachimbo“ ()

    Gewünschte Zellen markieren, Menü>Daten>Datenüberprüfung
    Einstellungen dort:
    Zulassen:ganze Zahl
    Daten:zwischen
    Minimum: -2147483648
    Maximum: 2147483647

    Alles ohne Makro.

    Wie man ein Makro gleich nach dem Öffnen der Datei ausführen lässt, habe ich schon mal gepostet. Die Suche sollte da helfen.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Super! Damit hast du mir ein riesiges Stück weitergeholfen!

    Die letzte Frage bleibt jedoch noch:

    Ich habe eine If/ElseIf/Else - Abfrage, welche prächtig funktioniert, nur leider weiß ich nicht, wie ich im Else angebe, dass die Zelle B8 mit einer 0 oder mit der vorherigen Zahl gefüllt werden soll. Da die Zelle einen Binärcode als String beinhaltet, lässt sich deine Methodik über die Datenüberprüfung leider nicht anwenden.
    Über

    Visual Basic-Quellcode

    1. Range("B8").Select
    2. ActiveCell.FormulaR1C1 = "0"

    funktioniert es leider auch nicht.

    Wie implementiere ich das?

    Liebe Grüße
    Verstehe grad nicht, worauf du hinaus willst.

    Visual Basic-Quellcode

    1. Cells(8, 2).NumberFormat = "################################00000000000000000000000000000000"
    2. Cells(8, 2) = 0 '?


    oder

    Visual Basic-Quellcode

    1. Range("B8").Select
    2. Selection.NumberFormat = "################################00000000000000000000000000000000"
    3. ActiveCell.FormulaR1C1 = "0" '?


    oder

    Visual Basic-Quellcode

    1. Sub Kachimbo()
    2. '....
    3. Cells(8, 2).NumberFormat = "@"
    4. Cells(8, 2) = BitsLng(0)
    5. '....
    6. End Sub
    7. Function BitsLng(ByVal Value As Long) As String
    8. Dim strOut As String
    9. Dim negValue As Long
    10. Dim i As Long
    11. If Value < 0 Then
    12. negValue = Value
    13. Value = Value Xor &H80000000
    14. End If
    15. For i = 1 To 32
    16. strOut = strOut & (Value And 1)
    17. Value = Value \ 2
    18. Next i
    19. If negValue Then Mid$(strOut, 32) = 1
    20. BitsLng = StrReverse(strOut)
    21. End Function
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Nicht so kompliziert. Ich möchte lediglich die Zelle B8 mit einer 0 befüllen. Denn wenn zuvor eine falsche Zahl eingegeben wird, kommt eine Fehlermeldung und die Funktion wird gestoppt. Die Zelle in die die falsche Zahl eingegeben wurde, soll danach nicht die falsche Zahl weiter beinhalten, sondern einfach auf 0 gesetzt werden.
    Leider funktioniert einfach nichts. Beim Compilieren wird einfach alles beendet, sobald er in der Zeile ist, in der gesagt wird, dass sie 0 werden soll.
    Wer prüft auf den falschen Wert? Dein Makro oder die Datenüberprüfung von Excel. Und woher kommt die falsche Zahl? Vom Makro, per einfügen oder von einer manuellen Eingabe?
    Der Satz "Die Funktion wird gestoppt" klingt für mich eher nach einer Wertzuweisung per Makro. Da kann man den Wert vor dem Zuweisen natürlich prüfen und abfangen.

    Evtl. mal mehr Code (Das ganze Sub) als 2 Zeilen posten. Die 2 Zeilen an sich sind ja in Ordnung.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Visual Basic-Quellcode

    1. Public Function BinZuDez(ByVal n As String) As Long
    2. Dim i As Integer
    3. Dim AnzZeichen As Long
    4. AnzZeichen = Len(n)
    5. For i = AnzZeichen To 1 Step -1
    6. If Mid(n, i, 1) = 1 Then
    7. BinZuDez = BinZuDez + IIf(Mid(n, i, 1) = "1", 2 ^ (AnzZeichen - i), 0)
    8. ElseIf Mid(n, i, 1) = 0 Then
    9. BinZuDez = BinZuDez + IIf(Mid(n, i, 1) = "1", 2 ^ (AnzZeichen - i), 0)
    10. Else
    11. MsgBox "Falsche Eingabe! Bitte eine Binärzahl eingeben!"
    12. i = 0
    13. Cells(8, 2) = 0
    14. BinZuDez = 0
    15. BinZuDez (0)
    16. End If
    17. Next i
    18. End Function



    n wird eingelesen durch manuelle Eingabe in eine Excel-Zelle! Ein falscher Wert wäre beispielsweise "0101a".
    Ja, das Makro prüft ob das ein falscher Wert ist.
    Eine Funktion gibt in der Regel einen Wert aus. Sie kann weitere Funktionen aufrufen.

    Zellen Werte zuweisen und Subs aufrufen geht leider nicht.

    Also eine Formel in die Datenüberprüfung, welche die Nullen und Einsen zählt und mit der Anzahl GesamtZeichen vergleicht.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Visual Basic-Quellcode

    1. =UND(LÄNGE(B8)-LÄNGE(WECHSELN(B8;"0";""))-LÄNGE(WECHSELN(B8;"1";""))=0)

    Falls er meckert:

    Visual Basic-Quellcode

    1. =UND(LÄNGE(B8)-LÄNGE(WECHSELN(B8;"0";""))-LÄNGE(WECHSELN(B8;"1";""))=0;1=1)
    Gruß
    Peterfido

    Keine Unterstützung per PN!