Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Inputbox abbrechen

Inputbox abbrechen
Maris
Hi,
wie kann ich der Inputbox sagen wenn keine Eingabe gebacht wurde oder man auf abbrechen gegangen ist... nicht der Debugger startet...
Sub SortiereBereichNachEinerSpalte()
ActiveSheet.Unprotect
'CONSTANTS
Const strWsName = "list" 'Name des Blattes. ACHTUNG: muss existieren, sonst absturz
Const strSearchRng = "B2:CA2000" 'zu durchsuchende Range. Sollte angepasst werden
iNumberOfSortingColumn = InputBox("Please type in the number of the column you want to sort!" &  _
Chr$(13) & Chr$(13) & _
"For example: B=1 ; C=2 ; D=3 ") 'Nummer der Spalte, nach welcher sortiert wird
'VARIABLES
Dim ws As Worksheet
Dim rSearch As Range
Dim iNumberOfSortingColumn As String
'PROGRAMM-CODE
Set ws = Sheets(strWsName)
With ws
Set rSearch = .Range(strSearchRng)
rSearch.Sort _
Key1:=rSearch.Cells(iNumberOfSortingColumn), _
Order1:=xlAscending
End With
ActiveSheet.Protect AllowFormattingColumns:=True
End Sub
Danke
Gruß
Maris
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Inputbox abbrechen
10.09.2010 15:03:29
Maris
Habs!
If iNumberOfSortingColumn = "" Then Exit Sub
dann gehts!
Hoffe das ist immer der Fall... Falls nicht... Bitte Rückmeldung, wäre nett!
Gruß
Maris
AW: Inputbox abbrechen
10.09.2010 17:06:45
Jürgen
Hallo Maris,
hast Du schon mal ausprobiert, was passiert, wenn Du in der Inputbox ein "x" eingibst?
Bei dem entgegennehmen von Werten per Inputbox ist zu beachten:
- Inputbox liefert immer einen String zurück
- Wird die Inputbox abgebrochen ("abbrechen"-Button, Schließen-Kreuz, ESC), wird eine leere Zeichenkette zurückgegeben
- Versucht man das Ergebnis direkt in eine Variable mit einem Zahlendatentyp wie integer zu schreiben, klappt das, wenn der String in eine Zahl umwandelbar ist, da Excel eine automatische Typkonvertierung durchführt. Im Fall der leeren Zeichenkette kommt es jedoch zu einem Laufzeitfehler, weil eine leere Zeichenkette nicht in eine Zahl umgewandelt werden kann
- Da man nie sicher sein kann, was der Benutzer eingibt oder ob er die Inputbox abbricht, sollte das Ergebnis der Inputbox grundsätzlich in eine Variable vom Datentyp "String" zurückgegeben werden
- Möchte man einen Zahlenwert haben, prüft man diese Variable mit IsNumeric(), um festzustellen, ob der Inhalt in eine Zahl umgewandelt werden kann
- Ist die Prüfung erfolgreich, wandelt man den String in den gewünschten Zahlentyp um
Zu empfehlen ist außerdem, alle benutzten Variablen mit DIM zu deklarieren (und zwar vor ihrer Benutzung). Zu der Variable "iNumberOfSortingColumn": einen kleinen vorangestellten Buchstaben beim Variablennamen nutzt man i.d.R., um einen Hinweis auf den Datentyp der Variable zu geben, z.B. ein "i" für "integer". Dann sollte die Variable aber auch so deklariert sein ;-)
Dein Code könnte also so aussehen:
Sub SortiereBereichNachEinerSpalte()
'CONSTANTS
Const strWsName = "list"   'Name des Blattes. ACHTUNG: muss existieren, sonst absturz
Const strSearchRng = "B2:CA2000"   'zu durchsuchende Range. Sollte angepasst werden
'VARIABLES
Dim ws As Worksheet
Dim rSearch As Range
Dim iNumberOfSortingColumn As Integer
Dim Eingabe As String
Eingabe = InputBox("Please type in the number of the column you want to sort!" & _
Chr$(13) & Chr$(13) & _
"For example: B=1 ; C=2 ; D=3 ")   'Nummer der Spalte, nach welcher  _
sortiert wird
If IsNumeric(Eingabe) Then
iNumberOfSortingColumn = CInt(Eingabe)
Else
If Eingabe  "" Then
MsgBox "Die Eingabe war keine Zahl!"
Else
MsgBox "Abbruch durch den Anwender"
End If
Exit Sub
End If
'PROGRAMM-CODE
ActiveSheet.Unprotect
Set ws = Sheets(strWsName)
With ws
Set rSearch = .Range(strSearchRng)
rSearch.Sort _
Key1:=rSearch.Cells(iNumberOfSortingColumn), _
Order1:=xlAscending
End With
ActiveSheet.Protect AllowFormattingColumns:=True
End Sub

Noch eine Anmerkung: den Blattschutz hebst Du für das aktuelle Blatt auf und setzt ihn für dieses wieder, die Sortierung erfolgt auf dem Blatt "list". Das Blatt "list" und das aktive Blatt kann, muss aber nicht das gleiche Blatt sein. Sollte dies eigentlich das Ziel sein, solltest Du den Code entsprechend anpassen (also z.B. Sheets(strWsName) statt Activesheet)
Gruß, Jürgen
Anzeige
StrPtr
10.09.2010 17:26:49
Ramses
Hallo
... heisst das Zauberwort oder Application.Inputbox
Hier mal ein paar Varianten was da so alles passieren kann
Sub testIB()
    Dim strEingabe As Variant, nEingabe As Long
    strEingabe = InputBox("Geben Sie eine Zahl ein", "Zahltest 1", 1)
    If IsNumeric(strEingabe) Then
        strEingabe = CLng(strEingabe)
        MsgBox "Eingabe einer Zahl: " & strEingabe
    End If
    strEingabe = InputBox("Geben Sie anstelle einer Zahl einen Text ein", "Zahltest 2", "Test")
    If IsNumeric(strEingabe) Then
        strEingabe = CLng(strEingabe)
        MsgBox strEingabe
    End If
    If Not IsNumeric(strEingabe) Then
        MsgBox "Keine Zahl eingegeben"
    End If
    strEingabe = InputBox("Lassen Sie das Feld leer und klicken Sie auf OK", "Zahltest 3", "")
    If IsNumeric(strEingabe) Then
        strEingabe = CLng(strEingabe)
        MsgBox strEingabe
    End If
    If Not IsNumeric(strEingabe) Then
        MsgBox "Keine Zahl eingegeben"
    End If
    If strEingabe = "" Then
        MsgBox "Nichts eingegeben"
    End If
    strEingabe = InputBox("Schreiben Sie eine Zahl und klicken Sie auf abbrechen", "Zahltest 4", "5")
    If IsNumeric(strEingabe) Then
        strEingabe = CLng(strEingabe)
        MsgBox "Zahl erkannt trotz Abbrechen: " & strEingabe
    End If
    If Not IsNumeric(strEingabe) Then
        MsgBox "Zahl eingetragen und trotz ABBRECHEN als ""NOT ISNUMERIC"" erkannt"
    End If
    If strEingabe = "" Then
        MsgBox "Sie haben nichts eingegeben." & vbCrLf & _
        "Eine Unterscheidung auf leere Eingabe mit OK oder ABBRECHEN ist unmöglich"
    End If
    'Erkennen der ABBRECHEN Taste mit StrPtr
    If StrPtr(strEingabe) = 0 Then
        MsgBox "Sie haben jedoch trotz Eingabe von : """ & strEingabe & """ auf Abbrechen geklickt"
    End If
    'Alternativ und die beste Variante
    'Infos zu Type siehe VBA Hilfe
    strEingabe = Application.InputBox("Geben Sie einen Text ein und versuchen Sie mit OK zu beenden", "Zahltest mit App-Inputbox", Type:=1)
    If strEingabe = False Then MsgBox "Abbrechen angeklickt"
End Sub

Gruss Rainer
Anzeige
Hinweis
10.09.2010 19:36:32
JogyB
Hallo zusammen,
ist jetzt in dem Fall nicht so wild, aber die Prüfung
If strEingabe = False Then MsgBox "Abbrechen angeklickt"
ist bei Application.InputBox recht ungünstig.
Warum? Einfach mal "FALSCH" als Text (geht bei Type:=1 natürlich nicht, soll aber auch eine allgemeine Anmerkung sein) eingeben. Besser ist die Prüfung
If VarType(strEingabe) = vbBoolean Then MsgBox "Abbrechen angeklickt"
Die springt dann wirklich nur bei "Abbrechen" an.
Gruß, Jogy
Anzeige
Korrektur: Ist doch wild,...
10.09.2010 19:44:42
JogyB
denn bei Eingabe von 0 springt
If strEingabe = False Then MsgBox "Abbrechen angeklickt"
bei Application.InputBox auch an.
Also auf jeden Fall die Typprüfung verwenden.
Gruß, Jogy
Interessant----
10.09.2010 21:06:56
Ramses
Hallo
...dass die korrekte Eingabe einer Zahl 0 als ABBRECHEN interpretiert wird.
Dann ist VarType wirklich die bessere Variante.
Gruss Rainer
Anzeige
AW: Inputbox abbrechen
12.09.2010 14:01:23
Tino
Hallo,
teste mal diese Variante.
Option Explicit

Sub SortiereBereichNachEinerSpalte()
Dim ws As Worksheet
Dim rSearch As Range
Dim iNumberOfSortingColumn

Const strWsName = "list"
Const strSearchRng = "B2:CA2000"
      
iNumberOfSortingColumn = InputBox("Please type in the number of the column you want to sort!" & _
Chr$(13) & Chr$(13) & "For example: B=1 ; C=2 ; D=3 ")

If StrPtr(iNumberOfSortingColumn) <> 0 Then
    If IsNumeric(iNumberOfSortingColumn) Then
        iNumberOfSortingColumn = Fix((iNumberOfSortingColumn))
        If iNumberOfSortingColumn > 0 And iNumberOfSortingColumn < 80 Then
            ActiveSheet.Unprotect
            Set ws = Sheets(strWsName)
            With ws
               Set rSearch = .Range(strSearchRng)
               rSearch.Sort _
               Key1:=rSearch.Cells(iNumberOfSortingColumn), _
               Order1:=xlAscending
            End With
            ActiveSheet.Protect AllowFormattingColumns:=True
        End If
    End If
End If

End Sub
Gruß Tino
Anzeige
AW: Inputbox abbrechen
13.09.2010 09:42:09
Maris
Hallo zusammen,
vielen Dank für euer Feedback! Hab jetzt die Variante von Tino genommen klappt mit jeglicher variante. Super und Danke Tino!
Gruß
Maris
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Inputbox in Excel VBA richtig handhaben


Schritt-für-Schritt-Anleitung

Um eine Inputbox in Excel VBA zu verwenden und sicherzustellen, dass der Benutzer keine fehlerhaften Eingaben macht oder die Eingabe abbricht, kannst Du folgende Schritte befolgen:

  1. Erstelle eine Sub-Prozedur:

    Sub SortiereBereichNachEinerSpalte()
  2. Deklariere Variablen:

    Dim ws As Worksheet
    Dim rSearch As Range
    Dim Eingabe As String
    Dim iNumberOfSortingColumn As Integer
  3. Definiere Konstanten:

    Const strWsName = "list"
    Const strSearchRng = "B2:CA2000"
  4. Füge die Inputbox hinzu:

    Eingabe = InputBox("Bitte geben Sie die Spaltennummer ein, nach der Sie sortieren möchten!")
  5. Überprüfe die Eingabe:

    If Eingabe = "" Then
       MsgBox "Abgebrochen durch den Anwender"
       Exit Sub
    ElseIf Not IsNumeric(Eingabe) Then
       MsgBox "Die Eingabe war keine Zahl!"
       Exit Sub
    Else
       iNumberOfSortingColumn = CInt(Eingabe)
    End If
  6. Führe die Sortierung durch:

    Set ws = Sheets(strWsName)
    Set rSearch = ws.Range(strSearchRng)
    rSearch.Sort Key1:=rSearch.Cells(iNumberOfSortingColumn), Order1:=xlAscending
  7. Schütze das Blatt wieder:

    ActiveSheet.Protect AllowFormattingColumns:=True
    End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler bei leeren Eingaben: Wenn der Benutzer die Inputbox ohne Eingabe schließt, wird eine leere Zeichenkette zurückgegeben. Dies kann zu einem Laufzeitfehler führen, wenn Du versuchst, diese in einen Integer umzuwandeln. Überprüfe die Eingabe mit If Eingabe = "" Then.

  • Eingabe von ungültigen Zeichen: Wenn der Benutzer einen Buchstaben eingibt, musst Du sicherstellen, dass die Eingabe numerisch ist. Verwende IsNumeric(Eingabe).

  • Typkonvertierungsfehler: Stelle sicher, dass Du die Eingabe zuerst als String speicherst und erst danach in den gewünschten Datentyp umwandelst.


Alternative Methoden

Eine alternative Methode zur Verwendung der Inputbox ist die Application.InputBox, die mehr Kontrolle über den Datentyp der Eingabe bietet. Hier ein Beispiel:

Dim Eingabe As Variant
Eingabe = Application.InputBox("Bitte geben Sie eine Zahl ein", Type:=1) 'Type 1 für numerische Eingabe
If Eingabe = False Then
    MsgBox "Abgebrochen angeklickt"
    Exit Sub
End If

Diese Methode gibt False zurück, wenn der Benutzer auf "Abbrechen" klickt, was die Handhabung erleichtert.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung von Inputboxen in Excel VBA:

  1. Eingabe einer Zahl oder Text:

    Dim strEingabe As String
    strEingabe = InputBox("Geben Sie einen Text oder eine Zahl ein")
    If IsNumeric(strEingabe) Then
       MsgBox "Eingegebene Zahl: " & strEingabe
    ElseIf strEingabe = "" Then
       MsgBox "Nichts eingegeben"
    End If
  2. Sortierung mit Benutzerinput: Verwende das Beispiel aus der Schritt-für-Schritt-Anleitung, um eine Sortierung basierend auf der Benutzereingabe durchzuführen.


Tipps für Profis

  • Verwende VarType für Typüberprüfungen: Statt einfach auf False zu prüfen, kannst Du VarType verwenden, um sicherzustellen, dass die Eingabe tatsächlich von dem erwarteten Typ ist.

  • Inputbox für spezifische Datentypen: Nutze Application.InputBox mit dem Type-Parameter, um die Eingabe auf einen bestimmten Datentyp zu beschränken.

  • Vermeide globale Variablen: Halte Deine Variablen lokal, um die Übersichtlichkeit zu erhöhen und unerwartete Fehler zu minimieren.


FAQ: Häufige Fragen

1. Wie kann ich eine Inputbox abbrechen?
Wenn der Benutzer auf "Abbrechen" klickt, gibt die Inputbox eine leere Zeichenkette oder False zurück, abhängig von der verwendeten Methode.

2. Was passiert, wenn ich ungültige Eingaben mache?
Wenn die Eingabe nicht konvertierbar ist (z.B. ein Buchstabe statt einer Zahl), wird ein Laufzeitfehler auftreten, es sei denn, Du hast eine Prüfung eingebaut.

3. Kann ich die Inputbox anpassen?
Die Standard-Inputbox kann nicht angepasst werden. Für Anpassungen solltest Du UserForms verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige