Office: Feststellen, ob Zelle in benanntem Bereich?

Helfe beim Thema Feststellen, ob Zelle in benanntem Bereich? in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Moin, moin! Ich habe auf einem Sheet mehrere benannte Bereiche. Wenn der User eine Zelle ändert möchte ich per VBA feststellen, ob diese Zelle in... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von IngoXT, 18. März 2013.

  1. IngoXT
    IngoXT Erfahrener User

    Feststellen, ob Zelle in benanntem Bereich?


    Moin, moin!

    Ich habe auf einem Sheet mehrere benannte Bereiche.
    Wenn der User eine Zelle ändert möchte ich per VBA feststellen, ob diese Zelle in einem der benannten Bereiche liegt (genauer: in welchem sie liegt)

    Geht das irgendwie?

    Vielen Dank schon mal!

    IngoXT
     
    IngoXT, 18. März 2013
    #1
  2. Beverly
    Beverly Erfahrener User
    Hi Ingo,

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("Bereich1")) Is Nothing Then
          MsgBox "Zelle im Bereich1"
       ElseIf Not Intersect(Target, Range("Bereich2")) Is Nothing Then
          MsgBox "Zelle im Bereich2"
       End If
    End Sub
    Bis später,
    Karin
     
    Beverly, 18. März 2013
    #2
  3. IngoXT
    IngoXT Erfahrener User
    Intersect-Fehlermeldung

    Hallo Karin,

    vielen Dank erst Mal.

    Auf intersect bin ich jetzt auch schon gestoßen und mir diese Funktion gebastelt:
    Code:
    
    Public Function NameZelle(rngTest As Range) As String
      
      Dim rngHelp As Range
      Dim rngIsect As Range
      Dim I As Integer
      
      With ActiveWorkbook
        For I = 1 To .Names.Count
          Set rngHelp = Range(.Names(I).Name)
          Set rngIsect = Application.Intersect(rngTest, rngHelp)
          If rngIsect Is Nothing Then
              NameZelle = ""
            Else
              NameZelle = rngHelp.Name
          End If
        Next I
      End With
    
    End Function
    
    
    
    Bekomme beim Testen beim Setzen von rngIsect aber immer die Meldung "die methode intersect für das objekt _global ist fehlgeschlagen".
    Komme nicht dahinter, woran das liegt Feststellen, ob Zelle in benanntem Bereich? :confused:
    rngTest und rngHelp sind jedenfalls richtig gesetzt.

    IngoXT
     
    IngoXT, 18. März 2013
    #3
  4. Beverly
    Beverly Erfahrener User

    Feststellen, ob Zelle in benanntem Bereich?

    Hi Ingo,

    wie rufst du die Function auf? Ich habe es mal so getestet

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
       NameZelle Target
    End Sub
    
    Ich kann deinen Fehler nicht nachvollziehen.

    Bis später,
    Karin
     
    Beverly, 18. März 2013
    #4
  5. IngoXT
    IngoXT Erfahrener User
    Test von NameZelle

    Moin, moin!

    Ich hatte mir da eine Testfunktion geschrieben:
    Code:
    Public Function TestNameZelle()
      Sheets("Tabelle1").Activate
      Debug.Print NameZelle(Range("Tabelle1!A2"))
    End Function
    
    
    Aber auch wenn ich NameZelle direkt aus dem Worksheet_Change-Ereignis heraus aufrufe, so wie Du, bekomme ich die gleiche Fehlermeldung.

    Ich verwende übrigens Excel 2010, der Kunde hat aber noch Excel 2003, es ist also eine .xls-Datei.

    lg

    Ingo
     
    IngoXT, 19. März 2013
    #5
  6. IngoXT
    IngoXT Erfahrener User
    NameZelle funktioniert in leerer Arbeitsmappe

    Wenn ich die Funktion NameZelle in einem leeren Arbeitsblatt ausprobiere funktioniert sie.
    Allerdings gibt sie nicht wie gewünscht den Namen des benannten Bereiches zurück, sondern seine Adresse, also so etwas wie:
    =Tabelle1!$A$1:$D$8
    Aber so klappt es:
    Code:
    
    Public Function NameZelle(rngTest As Range) As String
      
      Dim rngHelp As Range
      Dim rngIsect As Range
      Dim I As Integer
      
      With ActiveWorkbook
        For I = 1 To .Names.Count
          Set rngHelp = Range(.Names(I).Name)
          Set rngIsect = Application.Intersect(rngHelp, rngTest)
          If rngIsect Is Nothing Then
              NameZelle = ""
            Else
              NameZelle = .Names(I).Name
              Exit Function
          End If
        Next I
      End With
    
    End Function
    
    Leider immer noch nicht in dem Worksheet, in dem ich sie eigentlich brauche....
    Gibt es für Excel auch so eine Reparaturmethode für korrupt Dateiene wie bei Access?

    Ingo
     
    IngoXT, 19. März 2013
    #6
  7. Rudi4ad Erfahrener User
    andere Variante

    Hi Ingo,
    'hab noch eine von 'Jinx' gefunden in
    http://www.ms-office-forum.net/forum/showthread.php?t=220916

    Code:
    Function fncGehörtZuNamen(Optional rngPrüf As Range) As String
    
    Dim oName As Name
    Dim rngZelle As Range
    
    If rngPrüf Is Nothing Then
      fncGehörtZuNamen = "Fehler in zu überprüfendem Bereich - bitte prüfen!"
      Exit Function
    End If
    
    On Error Resume Next
    
    For Each oName In ActiveWorkbook.Names
      Set rngZelle = Intersect(Range(oName.Name), rngPrüf)
      If Not rngZelle Is Nothing Then
        fncGehörtZuNamen = oName.Name
        Set rngZelle = Nothing
        Exit Function
      End If
    Next oName
    
    fncGehörtZuNamen = "keine Übereinstimmung mit benannten Bereichen"
    
    End Function
    
    Sub testaufruf()
    MsgBox fncGehörtZuNamen(Range("Tabelle2!i7"))
    End Sub
     
    Rudi4ad, 19. März 2013
    #7
  8. IngoXT
    IngoXT Erfahrener User

    Feststellen, ob Zelle in benanntem Bereich?

    Die Lösung!

    So, jetzt geht es.
    Das Problem war, dass es die Names-Auflistung nur für das ganze Workbook gibt.
    Es werden also auch benannte Bereiche gelistet, die nicht auf dem aktuellen Worksheet sind.
    Intersect funktioniert aber nur, wenn die zu vergleichenden Ranges auf einem Worksheet sind.
    Also muss man vor dem Aufruf von Intersect sicherstellen, dass es so ist.
    Die Names-Auflistung enthält auch die Eigenschaft RefersTo, die so etwas
    =Tabelle1!$A$1:$D$8
    zurückgibt.
    Daraus hole ich mir mit der folgenden Funktion den Tabellennamen:
    ?TabnameAusAdresse("=Tabelle1!$A$1:$D$8")
    Tabelle1

    Code:
    Public Function TabnameAusAdresse(strAdr As String) As String
      
      Dim intPos As Integer
      
      intPos = InStr(strAdr, "!")
      If intPos = 0 Then Exit Function
      TabnameAusAdresse = Mid(strAdr, 2, intPos - 2)
      
    End Function
    
    

    Damit kann man dann auf gleiches Worksheet testen, und alles läuft:
    Code:
    Public Function NameZelle(rngTest As Range, Optional strSheet As String = "") As String
      
      Dim rngHelp As Range
      Dim rngIsect As Range
      Dim I As Integer
      Dim strTab As String
      
      With ActiveWorkbook
        If strSheet = "" Then
          strSheet = .ActiveSheet.Name
        End If
        For I = 1 To .Names.Count
          strTab = TabnameAusAdresse(.Names(I).RefersTo)
          If strTab = strSheet Then
            Set rngHelp = Range(.Names(I).Name)
            Set rngIsect = Application.Intersect(rngHelp, rngTest)
            If rngIsect Is Nothing Then
                NameZelle = ""
              Else
                NameZelle = .Names(I).Name
                Exit Function
            End If
          End If
        Next I
      End With
    
    End Function
    
    Man kann den Namen des gewünschten Sheets übergeben; tut man das nicht, dann wird das ActiveSheet genommen.
     
    IngoXT, 19. März 2013
    #8
  9. IngoXT
    IngoXT Erfahrener User
    @Rudi4ad: Mit "On error resume next" geht es natürlich auch, aber dann werden alle anderen Fehler ja auch verschluckt.
    Mache ich nicht so gerne.

    Trotzdem vielen Dank!

    Ingo
     
    IngoXT, 19. März 2013
    #9
Thema:

Feststellen, ob Zelle in benanntem Bereich?

Die Seite wird geladen...
  1. Feststellen, ob Zelle in benanntem Bereich? - Similar Threads - Feststellen Zelle benanntem

  2. Fehlende fortlaufende Nummer feststellen

    in Microsoft Excel Hilfe
    Fehlende fortlaufende Nummer feststellen: Hallo zusammen, ich möchte gerne in Excel angezeigt bekommen, wenn eine fortlaufende Nummer fehlt. Leider hat die bedingte Formatierung mir nicht geholfen. Vorher noch zwei kurze Fragen: Kann...
  3. Bedingung Edithmode oder NewMode

    in Microsoft Access Hilfe
    Bedingung Edithmode oder NewMode: Ich habe folgende Frage: Wie kann ich in einem Formular feststellen ob ich mich in einem neuen Datensatz befinde, oder einen bestehenden Datensatz bearbeite ? würde gerne diesen Zustand in einem...
  4. Feststellen, welche Datenquellen im Datenmodell einer Arbeitsmappe verwendet werden

    in Microsoft Excel Tutorials
    Feststellen, welche Datenquellen im Datenmodell einer Arbeitsmappe verwendet werden: Feststellen, welche Datenquellen im Datenmodell einer Arbeitsmappe verwendet werden Excel für Microsoft 365 Excel 2019 Excel 2016 Excel 2013 Power BI...
  5. Unterweisungsbedarf in Abfrage feststellen

    in Microsoft Access Hilfe
    Unterweisungsbedarf in Abfrage feststellen: Hallo Zusammen, ich habe bereits Foren und Google befragt und leider noch keine Lösung für mein Problem gefunden *frown.gif* Ich erstelle eine DB mit der Wartungen und Schulungen verwaltet...
  6. Access Version feststellen

    in Microsoft Access Hilfe
    Access Version feststellen: Hallo Ich versteh gerade nicht, wie ich nun die Access Version feststellen kann. Bishier (bis und mit Access2016) lieferte SysCmd(7) die korrekte Version, bei Access 2016 war dies 16.0 Aber das...
  7. Bei Before_Update feststellen wie speicherung ausgelöst wurde

    in Microsoft Access Hilfe
    Bei Before_Update feststellen wie speicherung ausgelöst wurde: Hi Zusammen, Speicherung eines Datensatz kann ja über Shift+Return oder über Fenster Schliessen usw... ausgelöst werden. Im Ereigniss Form_Before_Update suche ich nach einer Möglichkeit dies...
  8. Feststellen ob accde oder accdb

    in Microsoft Access Hilfe
    Feststellen ob accde oder accdb: Hallo ich habe unter Acces20003 so fest ob ich eine Mde oder MdB offen habe: Code: Public Function IsMDE() As Boolean On Error GoTo Err_IsMDE Dim StrProp As String ' Set DBCurr =...
Schlagworte:
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden