Discussion:
Inputbox und Abbrechen
(zu alt für eine Antwort)
Peter Rieper
2004-07-21 19:19:19 UTC
Permalink
Moin,

Über application.inputbox möchte ich einen Bereich abfragen. Klappt ja
auch sehr schön mit Type 8.
Nun möchte ich aber im VBA-Code das Abbrechen (Cancel) abfangen. In
einem alten Beitrag wurde als Lösung ein Konstrukt mit 'on error ...'
usw. angegeben.
Geht es nicht auch anders?
Wenn nicht, warum nicht?

Tschüß
Peter
Stefan Onken
2004-07-21 20:00:16 UTC
Permalink
hallo Peter,
eine Variante wäre:

Sub Test()
Dim a
a = Application.InputBox("was", Type:=8)
If Not IsArray(a) Then
If a = "Falsch" Then MsgBox "Abbrechen"
End If
End Sub

Gruß
stefan
Post by Peter Rieper
Moin,
Über application.inputbox möchte ich einen Bereich abfragen. Klappt ja
auch sehr schön mit Type 8.
Nun möchte ich aber im VBA-Code das Abbrechen (Cancel) abfangen. In
einem alten Beitrag wurde als Lösung ein Konstrukt mit 'on error ...'
usw. angegeben.
Geht es nicht auch anders?
Wenn nicht, warum nicht?
Tschüß
Peter
Melanie Breden
2004-07-21 20:49:58 UTC
Permalink
Hallo Stefan, Hallo Peter,
Post by Stefan Onken
hallo Peter,
Sub Test()
Dim a
a = Application.InputBox("was", Type:=8)
If Not IsArray(a) Then
If a = "Falsch" Then MsgBox "Abbrechen"
End If
End Sub
damit kann man zwar überprüfen, ob die InputBox abgebrochen wurde,
aber wie kommt man bei korrekter Eingabe an den Range, um diesen
zu bearbeiten oder auszuwerten?
Dazu kommt noch, wenn eine einzelne Zelle markiert wurde liefert IsArray auch False :-(

Um ein Range-Objekt zuzuweisen ist die Set-Anweisung zwingend erforderlich,
was aber mit einer Variant-Variablen nicht möglich ist.

Die einzigste Möglichkeit ein Range-Objekt zu erhalten und gleichzeitig die
Abbrechen-Schaltfläche zu überprüfen ist IMO eine Fehlerbehandlungsroutine.
Zum Beispiel so:

Sub MyInputBox()
Dim rngArea As Range

On Error Resume Next
Set rngArea = Application.InputBox("Markiere einen Bereich", Type:=8)
On Error GoTo 0

If rngArea Is Nothing Then
MsgBox "Eingabe wurde abgebrochen"
Else
MsgBox rngArea.Address
End If
End Sub

--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Peter Rieper
2004-07-21 22:03:17 UTC
Permalink
Hallo Melanie,
Post by Melanie Breden
Hallo Stefan, Hallo Peter,
Post by Stefan Onken
hallo Peter,
Sub Test()
Dim a
a = Application.InputBox("was", Type:=8)
If Not IsArray(a) Then
If a = "Falsch" Then MsgBox "Abbrechen"
End If
End Sub
damit kann man zwar überprüfen, ob die InputBox abgebrochen wurde,
aber wie kommt man bei korrekter Eingabe an den Range, um diesen
zu bearbeiten oder auszuwerten?
Dazu kommt noch, wenn eine einzelne Zelle markiert wurde liefert IsArray auch False :-(
Um ein Range-Objekt zuzuweisen ist die Set-Anweisung zwingend erforderlich,
was aber mit einer Variant-Variablen nicht möglich ist.
Die einzigste Möglichkeit ein Range-Objekt zu erhalten und gleichzeitig die
Abbrechen-Schaltfläche zu überprüfen ist IMO eine Fehlerbehandlungsroutine.
Sub MyInputBox()
Dim rngArea As Range
On Error Resume Next
Set rngArea = Application.InputBox("Markiere einen Bereich", Type:=8)
On Error GoTo 0
If rngArea Is Nothing Then
MsgBox "Eingabe wurde abgebrochen"
Else
MsgBox rngArea.Address
End If
End Sub
--
Mit freundlichen Grüssen
Melanie Breden
- Microsoft MVP für Excel -
http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
'is nothing' ist das Zauberwort, ich habe die ganze Zeit mit False oder
if not rngArea herumgekaspert.

Schönen Dank auch & Gut's Nächtle!

Peter

Loading...