Während diese Frage ein wenig älter ist, möchte ich immer noch die richtige Weise zeigen, es ohne Fehler zu tun. Sie können es entweder über Funktion oder mit einem Sub tun.
Ihr Hauptverfahren ist so etwas:
Sub test()
Dim MyRange As Range
testSub Application.InputBox("dada", , , , , , , 8), MyRange 'doing via Sub
Set MyRange = testFunc(Application.InputBox("dada", , , , , , , 8)) ' doing via function
If MyRange Is Nothing Then
Debug.Print "The InputBox has been canceled."
Else
Debug.Print "The range " & MyRange.Address & " was selected."
End If
End Sub
die Sub -Wege (lustig) wäre:
Sub testSub(ByVal a As Variant, ByRef b As Range)
If TypeOf a Is Range Then Set b = a
End Sub
Und die Funktion aussehen würde:
Function testFunc(ByVal a As Variant) As Range
If TypeOf a Is Range Then Set testFunc = a
End Function
Jetzt einfach u so wie Sie möchten und löschen Sie die nicht verwendete Zeile.
Wenn Sie einen Sub oder eine Funktion aufrufen, müssen Sie den Parameter Set
nicht eingeben. Es ist jedoch egal, ob InputBox
ein Objekt zurückgibt oder nicht. Alles, was Sie tun müssen, ist zu überprüfen, ob der Parameter das Objekt ist, das Sie wollen oder nicht, und dann entsprechend zu handeln.
EDIT
Noch eine kluge Art und Weise das gleiche Verhalten mit einer Sammlung wie folgt verwendet:
Sub test()
Dim MyRange As Range
Dim MyCol As New Collection
MyCol.Add Application.InputBox("dada", , , , , , , 8)
If TypeOf MyCol(1) Is Range Then Set MyRange = MyCol(1)
Set MyCol = New Collection
If MyRange Is Nothing Then
Debug.Print "The inputbox has been canceled"
Else
Debug.Print "the range " & MyRange.Address & " was selected"
End If
End Sub
Wenn Sie noch Fragen haben, fragen Sie einfach;)
Das Problem ist nicht In diesen beiden Codezeilen ist es wahrscheinlich in den Zeilen, die ihnen folgen. Zeig uns diese Zeilen. – RBarryYoung