Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Per VBA den Bereichsnamen auslesen

Per VBA den Bereichsnamen auslesen
26.04.2023 10:55:15
Joerg

Guten Morgen,
leider finde ich nur, wie ich einen definierten Bereich ansprechen kann aber nicht was ich suche.
Also, ich habe in einem Tabellenblatt verschiedene Bereiche mit einem Namen versehen.
Wenn ich jetzt eine Zelle ändere, ruft das ja

Private Sub Worksheet_Change(ByVal Target As Range)
...

auf.
Wie aber kann ich feststellen/auslesen in welchem Bereich sich die geänderte Zelle befindet?
Target.Name ist es ja leider nicht.
Gruß Jörg

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Per VBA den Bereichsnamen auslesen
26.04.2023 11:21:06
Beverly
Hi Jörg,

meinst du das so:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim namName As Name
    For Each namName In ThisWorkbook.Names
        If Not Intersect(Target, namName.RefersToRange) Is Nothing Then
            MsgBox namName.Name
        End If
    Next namName
End Sub
Bis später
Karin



AW: Per VBA den Bereichsnamen auslesen
26.04.2023 11:31:32
Joerg
Hi Karin,
vielen Dank dafür.
So ähnliches habe ich bei meinen zahlreichen Versuchen auch schon durch.
Leider bekomme ich bei Deinem Code einen Laufzeitfehler 1004.

Bei dir läuft der durch?
Gruß Jörg


Anzeige
AW: Per VBA den Bereichsnamen auslesen
26.04.2023 11:41:50
Joerg
wenn ich hinter der for schleife ein
MsgBox namName
schreibe, erhalte ich den Bereichsnamen mit einem: !#REF!
dahinter


AW: Per VBA den Bereichsnamen auslesen
26.04.2023 11:45:46
Beverly
Hi Jörg,

Laufzeitfehler 1004 kann sehr vieles bedeuten - da musst du schon mal mitteilen, was der Debugger GENAU sagt. Ich kann dein Problem leider nicht nachvollziehen.

https://www.herber.de/bbs/user/158894.xlsm

Bis später
Karin



AW: Per VBA den Bereichsnamen auslesen
26.04.2023 11:52:16
Joerg
Das ist putzig, dein Beispiel funktioniert bei mir auch.
Die Meldung ist:
Laufzeitfehler '1004'
Anwendungs- oder objektdefinierter Fehler


Anzeige
AW: Per VBA den Bereichsnamen auslesen
26.04.2023 12:00:45
Joerg
Selbst wenn ich in meiner Datei eine neue Tabelle erzeuge, bekomme ich diesen Fehler.


AW: Per VBA den Bereichsnamen auslesen
26.04.2023 12:35:41
Oberschlumpf
DANN zeig uns doch mal DIE DATEI MIT Fehler!


AW: Per VBA den Bereichsnamen auslesen
26.04.2023 13:18:42
Joerg
Der Fehler ist in Karins Beispiel ganz einfach reproduzierbar.
Die "Tabelle1" einfach kopieren. Sobald es zwei Tabellen in dem Workbook gibt, kommt eben dieser Fehler.


AW: Per VBA den Bereichsnamen auslesen
26.04.2023 13:21:18
Oberschlumpf
sorry, ich baue keine Dateien nach...auch nich solche "einfachen Nachbauten" - ich hab schon zu oft erlebt, dass der Fragende irgdwas vergessen - oder anders gemeint - hat

zeig bitte du uns diese Fehler-Datei per Upload, dann schau ich weiter mit an


Anzeige
AW: Per VBA den Bereichsnamen auslesen
26.04.2023 13:47:24
Matthias
Moin!
Bin grad ohne Rechner und deshalb nur als Idee.
Der Fehler wird vermtl. entstehen, da du beim Intersect deinen targetBereich mitbeinem Bereich aus einem anderen Blatt vergleichst. Zumindest wenn du mehrere Blätter mit enthaltenen names hast.
Unter den Eigenschaften habe ich nix gefunden, dass das zugehörige Blatt ausgibt. Evtl. müsstest du da halt mit on errorvarbeiten und den Fehler auswerten. Kein Fehler und du hast den Namen sonst überspringen.
Nur eine Idee.
VG


Anzeige
AW: Per VBA den Bereichsnamen auslesen
26.04.2023 13:35:55
Rudi Maintaire
Hallo,
kleine Zusatzbedingung.
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim namName As Name
  For Each namName In ThisWorkbook.Names
    If namName.Parent Is Me Then
      If Not Intersect(Target, namName.RefersToRange) Is Nothing Then
        MsgBox namName.Name
      End If
    End If
  Next namName
End Sub
Gruß
Rudi


AW: Per VBA den Bereichsnamen auslesen
26.04.2023 13:42:29
Der Steuerfuzzi
Hallo Rudi,

kann man zwei Objekte auf Gleichheit testen? Ich hätte jetzt die .Name Eigenschaft verwendet, also
If namName.Parent.name = Me.Name Then 
Grüße
Michael


Anzeige
AW: Per VBA den Bereichsnamen auslesen
26.04.2023 14:01:15
Rudi Maintaire
Hallo,
geht nicht immer.
If Target is Range("A1") klappt z.B. nicht.
Ergibt keinen Fehler aber auch nie True.

Bei Worksheet/ Workbook geht's wiederum
Sub xxx()
  Dim wks As Worksheet
  For Each wks In Worksheets
    If wks Is Sheets(2) Then MsgBox "Hallo"
  Next
End Sub

Sub yyy()
  Dim wkb As Workbook
  For Each wkb In Workbooks
    If wkb Is ThisWorkbook Then MsgBox "Hallo"
  Next wkb
End Sub
Gruß
Rudi


Anzeige
AW: Per VBA den Bereichsnamen auslesen
26.04.2023 13:39:16
Der Steuerfuzzi
Hallo,

wenn die Bereiche, die Du mit Intersect prüfst auf verschiedenen Blättern liegen, kommt der Fehler.

Durch das kopieren hast Du einmal die Namen auf Blattebene in Tabelle1 mit Verweis auf Tabelle1 und auf Arbeitsmappenebene (durch die Kopie des Blatts) mit Verweis auf das kopierte Blatt. Wenn dann der Code auf einen Namen trifft, der auf einem anderen Blatt liegt, dann kommt der Fehler.

Man könnte mit der .Parent Eigenschaft des Namens prüfen, ob die Bereiche auf dem gleichen Blatt liegen und dann erst prüfen, ob sich Target darin befindet...

Gruß
Michael


Anzeige
AW: Per VBA den Bereichsnamen auslesen
26.04.2023 13:27:15
GerdL
Moin,
bei mir funktioniert Karin 's Code auch mit 2 Tabellen ohne Probleme.
Ich vermute eine andere Ursache.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim N As Name
    
    For Each N In ThisWorkbook.Names
        If InStr(N.RefersTo, "=" & Me.Name & "!") Then
        If Not Intersect(N.RefersToRange, Target) Is Nothing Then
            MsgBox N.Name
        End If
        End If
    Next

End Sub
Gruß Gerd


AW: Per VBA den Bereichsnamen auslesen
26.04.2023 14:43:43
Jörg
Erstmal vielen Dank an alle, für eure Mühen.
Das mit den Tabellen-Namen war das Problem.
Ich habe diesen Code genommen, mußte allerdings die erste If etwas erweitern. Jetzt läuft es wie es soll.
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim N As Name
    For Each N In ThisWorkbook.Names
        If InStr(N.RefersTo, "='" & Me.Name & "'!$") Then
        If Not Intersect(N.RefersToRange, Target) Is Nothing Then
            MsgBox N.Name
        End If
        End If
    Next
End Sub
Nochmal 'Dank und viele Grüße
Jörg


Anzeige
AW: Per VBA den Bereichsnamen auslesen
26.04.2023 14:31:00
Daniel
Hi
mal eine der beschriebenen Ideen in Code gefasst:

dim nme as Name
dim rng as range
for each nme in Thisworkbook.Names
    set rng = nothing
    on Error goto 0
    set rng = Intersect(Range(nme.name), target)
    on Error 
    if not rng is nothing then Msgbox nme.Name & " - " & rng.Address
next
Zellbereiche, die zu formatierten Tabellen gehören, werden zwar im Namenseditor aufgelistet, aber von dieser Schleife nicht berücksichtigt, da es keine Namen, sondern Listobjekte sind.
Man verwendet hier am besten On Error, da es mehrere Punkte gibt, die anderen Falls geprüft werden müssen.
- Name rerferenziert auf ein anderes Blatt
- Name enthält keine Zellbereich, sondern einen Wert oder was anderes.

Gruß Daniel


Anzeige
dann aber bitte On Error richtig einsetzen
26.04.2023 14:37:54
Rudi Maintaire
dim nme as Name
dim rng as range
for each nme in Thisworkbook.Names
    set rng = nothing
    on Error Resume Next
    set rng = Intersect(nme.RefersToRange, target)
    on Error goto 0
    if not rng is nothing then Msgbox nme.Name & " - " & rng.Address
next

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige