Microsoft Excel

Herbers Excel/VBA-Archiv

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

Name des selektieren Bereichs löschen | Herbers Excel-Forum


Betrifft: Name des selektieren Bereichs löschen von: Peter
Geschrieben am: 01.02.2012 21:32:20

Guten Abend

Mit untenstehendem Code kann ich den Bereichsnamen des selektierten Bereichs löschen.

Die auskommentierten Zeilen laufen nicht. Damit möchte ich folgendes erreichen.
Ein bestimmter Bereich oder eine Zelle, kann mehr als einen Bereichsnamen enthalten. Mit
Anz = Selection.Offset(0,0).Names.Count möchte ermitteln, wieviele Namen der selektierte Bereich (oder die Zelle) enthält. Falls das Ergebnis null ist, gibt es nichts zu löschen, anderenfalls soll Select Case entsprechend der Anzahl Namen durchlaufen werden.
Zudem liefert mir die MsgBox nur den Bereichs- oder Zellbezug. Ich möchte jedoch in der MsgBox den Namen, der dann gelöscht wird aus Ausgabe erhalten.

Wer kann mir helfen?

Danke und Gruss, Peter

Sub NamenWeg()
Dim Anz As Long, i As Long

'''Anz = Selection.Offset(0, 0).Names.Count
'''if Anz = 0 then GoTo Ende
'''    For i = 1 To Anz
    Select Case MsgBox(Selection.Offset(0, 0).Name, vbInformation + vbYesNo)
             Case vbYes: Selection.Offset(0, 0).Name.Delete
             Case vbNo: GoTo WeiterBeiNein
    End Select
WeiterBeiNein:
'''    Next i
Ende:
End Sub

  

Betrifft: AW: Name des selektieren Bereichs löschen von: Daniel
Geschrieben am: 01.02.2012 21:41:41

Hi
ich vermute, daß das so nicht funktioniert.
wahrscheinlich musst du andersrum arbeiten und erstmal eine Schleife über alle Namen machen.
in dieser prüfst du, ob der Zellbereich des Namens mit den gewünschten Zellbereich übereinstimmt und wenn ja, musst du dir diese merken und danach löschen.
desweiteren wäre noch zu klären, wann ein Name relevant ist, dh muss er genau deckungsgleich mit dem Zellbereich sein, oder reicht eine Schnittmenge von einer bestimmten grösse, muss der Name vollständig innerhalb des Zellbereichs liegen, muss der Zellbereich vollständig innerhalb des Namens liegen?
Gruß Daniel


  

Betrifft: AW: Name des selektieren Bereichs löschen von: Peter
Geschrieben am: 01.02.2012 22:22:40

Hallo

So müssen sich eigentlich alle benannten Bereiche, die genau mit dem selektierten Bereich übereinstimmen, abfangen lassen.

Mir ist nicht klar, weshalb das nicht funktioniert.

Hat jemand einen Lösungsansatz?

Gruss, Peter

Sub NamenWegVariante1()
Dim N_M As Name, Anzahl As Long, i As Long
Anzahl = 0
For Each N_M In Names

    If N_M.Name = "=" & Selection.Parent.Name & "!" & Selection.Address Then Anzahl = Anzahl +  _
1
    
Next

If Anzahl = 0 Then GoTo Ende

For i = 1 To Anzahl
    Select Case MsgBox(Selection.Offset(0, 0).Name, vbInformation + vbYesNo)
             Case vbYes: Selection.Offset(0, 0).Name.Delete
             Case vbNo: GoTo Weiter
    End Select
Weiter:
Next i
Ende:
End Sub



  

Betrifft: AW: Name des selektieren Bereichs löschen von: Peter
Geschrieben am: 01.02.2012 22:42:21

Hallo
Mit untenstehendem Code werden nun alle benannten Bereiche gelöscht, die genau mit dem selektierten Bereich übereinstimmen..
Das bleibende Problem ist noch, dass mir das Ergebnis des Codes
Selection.Offset(0, 0).Name
den ich mir in der MsgBox anzeigen lasse, nicht den Bereichsnamen, sondern den Bezug gibt.
Wie kann ich mir in der MsgBox den Bezug anzeigen lassen?

Gruss, Peter

Sub NamenWeg()
Dim N_M As Name, Anzahl As Long, i As Long
Anzahl = 0
On Error Resume Next
For Each N_M In ActiveWorkbook.Names
If IsError(N_M) Then GoTo Weiter
 
If N_M.RefersToRange.Address = Selection.Address Then Anzahl = Anzahl + 1

Next

If Anzahl = 0 Then GoTo Ende

For i = 1 To Anzahl
    Select Case MsgBox(Selection.Offset(0, 0).Name, vbInformation + vbYesNo)
             Case vbYes: Selection.Offset(0, 0).Name.Delete
             Case vbNo: GoTo Weiter
    End Select
Weiter:
Next i
Ende:
End Sub



  

Betrifft: AW: Name des selektieren Bereichs löschen von: Josef Ehrensberger
Geschrieben am: 01.02.2012 22:45:39


Hallo Peter,

Sub namenLoeschen()
  Dim objName As Name
  Dim rng As Range
  
  For Each objName In ThisWorkbook.Names
    On Error Resume Next
    Set rng = objName.RefersToRange
    On Error GoTo 0
    If Not rng Is Nothing Then
      If Not Intersect(rng, Selection) Is Nothing Then
        If MsgBox("Den Namen '" & objName.Name & "' löschen", _
          vbQuestion + vbYesNo, "Frage") = vbYes Then objName.Delete
      End If
    End If
    Set rng = Nothing
  Next
End Sub






« Gruß Sepp »



  

Betrifft: AW: Name des selektieren Bereichs löschen von: Peter
Geschrieben am: 01.02.2012 23:02:57

Hallo Sepp
Das ist grossartig!
Vielen Dank.

Kleine Anschlussfrage:
Jetzt wird ja auch ein Name berücksichtigt, der innerhalb der Selektion ist, auch wenn er mit der Selektion nicht übereinstimmt.

Wenn nur Namen berücksichtigt werden sollen, die mit der Selektion übereinstimmen, muss sicher
If Not Intersect(rng, Selection) Is Nothing Then
angepasst werden - doch wie?

Gruss, Peter


  

Betrifft: AW: Name des selektieren Bereichs löschen von: Josef Ehrensberger
Geschrieben am: 01.02.2012 23:06:52


Hallo Peter,

dann so.

Sub namenLoeschen()
  Dim objName As Name
  Dim rng As Range
  
  For Each objName In ThisWorkbook.Names
    On Error Resume Next
    Set rng = objName.RefersToRange
    On Error GoTo 0
    If Not rng Is Nothing Then
      If Not Intersect(rng, Selection) Is Nothing Then
        If rng.Address = Selection.Address Then
          If MsgBox("Den Namen '" & objName.Name & "' löschen", _
            vbQuestion + vbYesNo, "Frage") = vbYes Then objName.Delete
        End If
      End If
    End If
    Set rng = Nothing
  Next
End Sub






« Gruß Sepp »



  

Betrifft: AW: Name des selektieren Bereichs löschen von: Peter
Geschrieben am: 02.02.2012 09:24:58

Hallo Sepp
In einem "einfachen" Testfile hat das funktioniert. Super. Vielen Dank.

Jetzt bin ich auf folgendes Problem gestossen: In einem grösseren File
kommt die Fehlermeldung "Die Methode Intersect für das Objekt _Global ist fehlgeschlagen (Laufzeitfehler 1004).
Ich habe auf debug gedrückt und dann die aktuellen Variablen im Direktbereich abgefragt:
?objname
=Externe!$F$45:$F$60
?objname.Name
Externe!_FilterDatabase
objname.Name
?rng.Name
=Externe!$F$45:$F$60
?rng.Parent.name
Externe
?selection.name
=Cockpit!$C$31


Hier stört anscheinend der Name "_FilterDatabase". Komisch darin ist, dass dieser gar nicht existiert. Weder in der Tabelle "Externe", noch sonst wo in der Datei.

Wenn ich On Error GoTo 0
auskommentiere, lauft der Code durch. Das ist vielleicht die einfachste Lösung, doch es wurmt mich schon, weshalb ein Name, der gar nicht zu existieren scheint (auch nicht im Namensmanager), solche Probleme verursacht.

Gruss, Peter


  

Betrifft: AW: Name des selektieren Bereichs löschen von: Josef Ehrensberger
Geschrieben am: 02.02.2012 13:08:09


Hallo Peter,

dann benötigen wir halt noch eine Abfrage.

Sub namenLoeschen()
  Dim objName As Name
  Dim rng As Range
  
  For Each objName In ThisWorkbook.Names
    On Error Resume Next
    Set rng = objName.RefersToRange
    On Error GoTo 0
    If Not rng Is Nothing Then
      If rng.Parent.Name = Selection.Parent.Name Then
        If Not Intersect(rng, Selection) Is Nothing Then
          If rng.Address = Selection.Address Then
            If MsgBox("Den Namen '" & objName.Name & "' löschen", _
              vbQuestion + vbYesNo, "Frage") = vbYes Then objName.Delete
          End If
        End If
      End If
    End If
    Set rng = Nothing
  Next
End Sub






« Gruß Sepp »



  

Betrifft: AW: Name des selektieren Bereichs löschen von: Peter
Geschrieben am: 02.02.2012 14:21:03

Hallo Sepp
Jetzt läuft es einwandfrei.
Vielen Dank.
Gruss, Peter


Beiträge aus den Excel-Beispielen zum Thema "Name des selektieren Bereichs löschen"