Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema RefEdit
BildScreenshot zu RefEdit RefEdit-Seite mit Beispielarbeitsmappe aufrufen

Bereich per INPUTBOX markieren und auswerten

Betrifft: Bereich per INPUTBOX markieren und auswerten von: NoNet
Geschrieben am: 05.06.2008 15:07:35

Hallo Leute,

per Application.InputBox("Text",Type:=8) kann man (ähnlich eines RefEdit-Steuerelementes) einen Tabellenbereich markieren .
Sofern man tatsächlich einen Bereich markiert, kann man diesen als RANGE-Objekt weiter verarbeiten, sihe Code :

Sub AuswahlPerInputbox()
    Dim rngZelle As Range
    Set rngZelle = Application.InputBox("Bitte Zelle auswählen", Type:=8)
    MsgBox rngZelle.Address
End Sub
Code eingefügt mit Syntaxhighlighter 4.14

Mit welchem Code kann man jedoch reagieren, wenn diese Inputbox abgebrochen wird ?
Dann bricht das Makro mit einer Fehlermeldung ab. Das kann man zwar per On Error Resume Next unterbinden, ist allerdings alles andere als elegant .

Nun habe ich schon versucht dies über eine temp. VARIANT-Variable und Auswertung per TYPENAME(TempVar) zu lösen, aber es ist mir leider nicht gelungen .

Kann mir bitte jemand auf die Sprünge helfen (OHNE "On Error...." !).

Danke, Gruß NoNet

PS : Dazu angetrieben wurde ich durch folgende Fragen :
https://www.herber.de/forum/messages/983617.htm
http://www.ms-office-forum.net/forum/showthread.php?t=233062l

  

Betrifft: AW: Bereich per INPUTBOX markieren und auswerten von: Nepumuk
Geschrieben am: 05.06.2008 15:19:20

Hallo NoNet,

guckst du: http://www.office-loesung.de/ftopic232480_0_0_asc.php&sid=42aa3a86b36a838eee5062afe393bba7#921820

Gruß
Nepumuk


  

Betrifft: AW: Bereich per INPUTBOX markieren und auswerten von: NoNet
Geschrieben am: 05.06.2008 15:51:12

Danke Nepumuk,

Beispiel3 war genau das, was ich suchte (auch die anderen beiden Code-Beispiele sind interessant).
Auf den Umweg per Collection wäre ich selbst wohl als letztes gekommen.
Habe nun nur das von mir verhasste "Exit Do" und "Exit Sub" durch eine Boole'sche Abbruchbedingung ersetzt, so sieht der Code nun aus :


Sub Beispiel3()
    'Bereich per Application.Inputbox markieren und auswerten
'http://www.office-loesung.de/ftopic232480_0_0_asc.php&sid=42aa3a86b36a838eee5062afe393bba7#921820

    '12.08.2008, Nepumuk
    Dim objRange As Range
    Dim bolCancel As Boolean 'ergänzt von NoNet, 05.06.2008
    Dim objRangeCollection As Collection
    Set objRangeCollection = New Collection
    bolCancel = False 'ergänzt von NoNet, 05.06.2008
    
    Do
        objRangeCollection.Add Application.InputBox(Prompt:= _
            "Bitte die Quellspalte(n) markieren", Title:="Auswahl", Type:=8)
        If TypeOf objRangeCollection(objRangeCollection.Count) Is Range Then
            Set objRange = objRangeCollection(objRangeCollection.Count)
            bolCancel = True 'ergänzt von NoNet, 05.06.2008
        ElseIf IsEmpty(objRangeCollection(objRangeCollection.Count)) Then
            MsgBox "Objektzuweisung fehlgeschlagen. Bitte nochmal versuchen", _
                vbCritical, "Fehlermeldung"
        ElseIf Not objRangeCollection(objRangeCollection.Count) Then
            bolCancel = True 'cancelbutton pressed - ergänzt von NoNet, 05.06.2008
        Else
            MsgBox "Fehler " & CStr(vbObjectError) & vbLf & vbLf & _
                "Unbekannter Objektfehler beim zuweisen eines Bereiches.", _
                vbCritical, "Fehlermeldung"
            bolCancel = True 'ergänzt von NoNet, 05.06.2008
        End If
    Loop Until bolCancel
    MsgBox "Bereich " & objRange.Address & " markiert"
End Sub




Gruß, NoNet


  

Betrifft: AW: Bereich per INPUTBOX markieren und auswerten von: Nepumuk
Geschrieben am: 05.06.2008 16:04:03

Hallo NoNet,

ist ja niedlich, so hast du die Fehlermeldung von der Inputbox zur Msgbox verlagert. Denn wenn du auf Abbrechen drückst, oder bei der Bereichszuweisung ein Fehler passiert, dann ist objRange ja Nothing und die Abfrage der Adresse erzeugt einen Fehler 91 (Objekt ist leer).

Und, wozu eigentlich die Zuweisung False an die boolsche Variable? Das ist doch sowieso ihr Defaultwert nach der Initialisierung. In anderen Sprachen z.B. Assembler ist so etwas notwendig, aber doch nicht in VB.

Gruß
Nepumuk


  

Betrifft: OK, OK - hatte das zuerst getestet... von: NoNet
Geschrieben am: 05.06.2008 16:22:56

Hey Nepumuk,

heute gibste mir aber echt was auf meine viel zu warme Mütze ;-)

Das "Exit Sub" hatte ich erst nach dem Testen entfernt...
Habe jetzt ein intCancel (mit Werten 0,1,2) anstatt bolCancel eingebaut und das funktioniert einwandfrei :-)
Die DEFAULT-Wertzuweisung habe ich aus reiner Ordentlichkeit vorgenommen - wohlwissend, dass eine Boole'sche Variable standardmässig den Wert FALSE beinhaltet.

Danke nochmal, Salut, NoNet


 

Beiträge aus den Excel-Beispielen zum Thema "Bereich per INPUTBOX markieren und auswerten"