Fehler Typen unverträglichkeit bei Abbrechen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
InputBox MsgBox
Bild

Betrifft: Fehler Typen unverträglichkeit bei Abbrechen
von: Lars
Geschrieben am: 25.11.2015 07:48:10

Hallo,
ich kann mit nachfolgendem Code eine Zeile kopieren und wieder einfügen.

Public Sub KopierenundEinfügen()
    Dim lngRow5 As Long, lngRow6 As Long
    If TypeOf Selection Is Range Then
        Dim i As Integer, j As Integer
        
        lngRow5 = ThisWorkbook.Names("Anfang").RefersToRange.Row
        lngRow6 = ThisWorkbook.Names("Ende").RefersToRange.Row
        
        Selection.Cells(1, 1).Select
        
        If Selection.Row > lngRow5 And Selection.Row < lngRow6 Then
            
            With Worksheets("Aufstellung")
                
                Worksheets("Aufstellung").Unprotect Password:="sperl"
                        i = InputBox("Welche Zeile soll kopiert werden?")
                        j = InputBox("In welche Zeile soll kopiert werden?")
                            Rows(i).Select
                            Selection.Copy
                            Rows(j).Select
                            Selection.Insert Shift:=xlDown
                            Cells(j, 70) = Format(Now, "DD.MM.YYYY")
                            Cells(j, 71) = Tabelle1.Cells(3, 24)
                Worksheets("Aufstellung").Protect Password:="sperl"
                ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
                , AllowFiltering:=True
                
            End With
        Else
            Call MsgBox("FUNKTION NICHT MÖGLICH:" & vbCr & "Die ausgewählte Zeile liegt  _
ausserhalb der ERSTEN und LETZTEN Zeile der Aufstellung oder es sind nur noch DREI Zeilen vorhanden.", vbExclamation, "Hinweis")
        End If
    Else
        Call MsgBox("Bitte eine Zeile auswählen.", vbExclamation, "Hinweis")
    End If
End Sub

Das Problem ist nur, dass sobald ich den Button Abbrechen betätige, ein Fehler auftritt.
Es kommt Typen Unverträglichkeit.
Hat jemand dazu eine Lösung. Ich kann mir nicht selber helfen.
Danke.

Bild

Betrifft: AW: Fehler Typen unverträglichkeit bei Abbrechen
von: Daniel
Geschrieben am: 25.11.2015 08:42:57
HI
das liegt daran, dass die Inputbox immer einen Text zurück gibt.
drückst du abbrechen oder klickst OK ohne was einzugeben, so ist der String der Leerstring.
deine aufnehmende Variable ist aber eine Zahl (integer) und daher muss VBA dann den Text aus der Inputbox in eine Zahl wandeln.
das funktioniert aber nur, wenn der eingegebene Text auch wie eine Zahl aussieht, ansonsten gibt es einen Fehlerabbruch.
Der Leerstring "" sieht nicht wie eine Zahl aus, daher dann der Fehler
Eine mögliche Lösung wäre in deinem Fall die Umwandlungsfunktion VAL zu verwenden.
diese gibt den Wert 0 zurück, wenn der umzuwandelnde Text nicht wie eine Zahl aussieht und erzeugt keinen Fehlerabbruch.
Ausserdem solltest du zusätzlich noch prüfen, ob abbrechen oder eine sinnvolle Zahl eingegeben wurde:

i = Val(InputBox("Welche Zeile soll kopiert werden?"))
j = Val(InputBox("In welche Zeile soll kopiert werden?"))
If i = 0 or j = 0 then
    msgbox "abbruch"
    Exit Sub
End If
Gruß Daniel


Bild

Betrifft: AW: Fehler Typen unverträglichkeit bei Abbrechen
von: Lars
Geschrieben am: 25.11.2015 08:52:51
@Daniel
danke Daniel.
Habe den code um deinen Code
If i = 0 Or j = 0 Then
Exit Sub
End If

erweitert.
Nur muss ich zuerst einmal abbrechen klicken und dann nochmals.
Erst dann ist meine Eingabebox weg.
Irgendwas stimmt noch nicht ganz oder?

Bild

Betrifft: AW: Fehler Typen unverträglichkeit bei Abbrechen
von: Daniel
Geschrieben am: 25.11.2015 09:02:45
Hi
nunja, genau das hatte ich ja auch schon in meinem Codebeispiel geschrieben, das musstest du nicht extra ergänzen.
wenn schon bei der ersten Inputbox abgebrochen werden soll, dann:

i = Val(Inputbox(...))
if i = 0 Then Exit Sub
j = Vale(Inputbox(...))
if j = 0 then Exit Sub
Gruß Daniel

Bild

Betrifft: strptr()
von: ransi
Geschrieben am: 25.11.2015 08:47:48
Hallo,
Versuch mal so:

Dim I As String
I = InputBox("Test")
If StrPtr(I) = 0 Then
    MsgBox "Abgebrochen"
    Else:
    MsgBox I
End If

ransi

Bild

Betrifft: AW: strptr()
von: Lars
Geschrieben am: 25.11.2015 08:49:38
@ransi
Danke für den tipp.
Aber wie soll ich dies in meinem Code einbinden?

Bild

Betrifft: AW: strptr()
von: ransi
Geschrieben am: 25.11.2015 09:13:09
Hallo Lars,
Ungetestet:

.
.
.
i = InputBox("Welche Zeile soll kopiert werden?")
j = InputBox("In welche Zeile soll kopiert werden?")
If strptr(i)<>0 then
  if strptr(J)<>0 then
    Deine Kopierroutine
  end if
end if
.
.
.
ransi

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Fehler Typen unverträglichkeit bei Abbrechen"