Clever-Excel-Forum

Normale Version: InputBox Schaltfläche Abbrechen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

Ich möchte über eine InputBox das Datum für eine Filterauswahl setzen.
Vorgabe ist heutiges Datum.
Funktioniert auch, aber wenn ich den Abbrechen Button klicke kommt ein "Laufzeitfehler 13" Typen unverträglich.
Wie kann ich bei klick auf Abbrechen das Makro beenden.
Code:
Sub Makro1()
 
  Dim sTxt As Date
  sTxt = InputBox("Bitte Datum bis eingeben" & Chr(13) & Chr(13) & "Datumeingabe TT.MM.JJJJ", "Eingabe Datum", Date)
  ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=11, Criteria1 _
       :="<" & CDbl(sTxt), Operator:=xlAnd
       
End Sub
Hallo Herbert,

vielleicht so?
Sub Makro1()

 Dim sTxt As String
 sTxt = InputBox("Bitte Datum bis eingeben" & Chr(13) & Chr(13) & "Datumeingabe TT.MM.JJJJ", "Eingabe Datum", Date)
 If Not CVar(sTxt) = False Then
   ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=11, Criteria1 _
      :="<" & CDbl(CDate(sTxt)), Operator:=xlAnd
 End If
End Sub
Gruß Uwe
Hallo Uwe,

danke für die Rückmeldung, aber es kommt die gleiche FM
Ich habe noch weiter gesucht und folgendes gefunden.

Code:
Sub Makro1()

   Dim sTxt As Variant

   sTxt = InputBox(prompt:="Bitte Datum eingeben" & Chr(13) _
   & Chr(13) _
   & "Vorgabedatum = Heute" _
   & Chr(13) & "Datumeingabe im Format TT.MM.JJJJ", _
   Title:="Eingabe Datum", Default:=Format(Date, "dd.mm.yyyy"))
   If sTxt = "" Then Exit Sub
   sTxt = CDate(sTxt)
      
    ActiveSheet.ListObjects("HaftGesamt").Range.AutoFilter Field:=11, Criteria1 _
        :="<=" & CDbl(sTxt), Operator:=xlAnd
        
End Sub
Damit funktioniert es.
Hallo Herbert,

ja, ich hatte mich leicht vertan.  Blush
So würde ich es machen:
Sub Makro1()
 Dim sTxt As String
 sTxt = InputBox("Bitte Datum bis eingeben" & Chr(13) & Chr(13) & "Datumeingabe TT.MM.JJJJ", "Eingabe Datum", Date)
 If IsDate(sTxt) Then
   ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=11, Criteria1 _
      :="<" & CDbl(CDate(sTxt)), Operator:=xlAnd
 End If
End Sub
Gruß Uwe
Hallo Uwe,

danke, das gefällt mir noch besser.
Wenn ich das richtig verstehe, kann ich jetzt auch noch zusätzlich auf die richtige Formateingabe beim Datum reagieren.

Code:
Sub Makro1()


  Dim sTxt As String

  sTxt = InputBox("Bis zu welchem Datum soll angezeigt werden?" & Chr(13) _
  & Chr(13) _
  & "Vorgabedatum = Heute" _
  & Chr(13) & "Datumeingabe im Format TT.MM.JJJJ", _
  "Eingabe Datum", Date)

   If IsDate(sTxt) Then
   ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=11, Criteria1 _
     :="<" & CDbl(CDate(sTxt)), Operator:=xlAnd

   ElseIf sTxt = "" Then
       Exit Sub

   Else
       aWert = MsgBox("Datum wurde mit falschem Format erfasst!", vbRetryCancel + vbCritical, "Format")
       If aWert = 2 Then
           Exit Sub
       ElseIf aWert = 4 Then
           Makro1
       End If
         
   End If
             
End Sub

Stimmt das so?
Hallo Herbert,

Du solltest alle Variablen deklarieren. Die ganzen Exit Subs sind unnötig:
Sub Makro1()

 Dim sTxt As String
 
 sTxt = InputBox("Bis zu welchem Datum soll angezeigt werden?" & Chr(13) _
 & Chr(13) _
 & "Vorgabedatum = Heute" _
 & Chr(13) & "Datumeingabe im Format TT.MM.JJJJ", _
 "Eingabe Datum", Date)
 
  If IsDate(sTxt) Then
   ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=11, Criteria1 _
     :="<" & CDbl(CDate(sTxt)), Operator:=xlAnd
 
  ElseIf Len(sTxt) Then
     If MsgBox("Datum wurde mit falschem Format erfasst!", vbRetryCancel + vbCritical, "Format") = 4 Then
         Makro1
     End If
  End If

End Sub
Gruß Uwe
Hallo Uwe,

danke, funktioniert bestens.
Hallo

ich sehe viel Aufwand für eine Aufgabe die m.E. viel einfacher zu lösen ist

Ich setz die Variable für InputBox oder MsgBox mit vbOkCancel Abfragen grunsaetzlich auf Variant
Dann kann Excel den Variable Typ selbst festlegen.  Mache ich auch wenn icjh Zahlen erwarte, es aber auch Text sein könnte. Oder ich von einem String den Tex oder eine Zahl abschneiden muss.

mfg  Gast 234