Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1176to1180
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
Inhaltsverzeichnis

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

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
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
Anzeige
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
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige