Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Intersect (Target,........) Is Nothing Then

Forumthread: Intersect (Target,........) Is Nothing Then

Intersect (Target,........) Is Nothing Then
11.07.2017 07:57:48
STeve
Guten Morgen miteinander.
Mich fuchst ein Bereich.
und zwar bei der Sub:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("C2:AG19")) Is Nothing Then
Call .................
End If
End Sub
würde ich gerne einen definierten Bereich anstatt (..., Range("C2:AG19")) einsetzen und zwar den Bereichsnamen
multibereich1_neu
Bei:
If Intersect(Target, multibereich1_neu) Is Nothing Then
kommt hin und wieder ?::
"Laufzeitfehler 1004 - Methode 'intersect' für Objekt '_global' fehlgeschlagen
Bitte um Ansage was ich da falsch mache.
Danke und mfg
STeve
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Range("multibereich")
11.07.2017 08:12:15
Matthias
Hallo
Z.B so

If Not Intersect(Target, Range("multibereich")) Is Nothing Then
MsgBox "Im Bereichdes definioerten Namen"
Else
MsgBox "Nicht im Bereichdes definioerten Namen"
End If
Gruß Matthias
Range - geht mal nicht.....:-(
11.07.2017 09:01:51
STeve
Hallo Matthias.........danke für den Tipp. Bist immer zur Stelle....
....aber bei:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("multibereich1_neu")) Is Nothing Then 'Methode von MatthiasL
Call ............        'im Bereich
Else
Call........             'nicht im Bereich
End If
End Sub
..........kommt die Fehlermeldung:
Laufzeitfehler: 1004 Die Methode 'Range' für das Objekt _Worksheet ist fehlgeschlagen.
mfg STeve
Anzeige
schau meine Datei, dort gehts ...
11.07.2017 09:24:09
Matthias
Hallo

Die Datei https://www.herber.de/bbs/user/114799.xlsm wurde aus Datenschutzgründen gelöscht


Gruß Matthias
kann es an der Union liegen ........
11.07.2017 09:35:05
STeve
Deine Datei läuft.
Frage : kann es an der Union liegen
das heißt der Name multibereich1_neu....scheint im Namensmanager ja nicht auf sondern wird zusammengefasst.
"multibereich1_neu"......also an den ""
mfg
Anzeige
AW: kann es an der Union liegen ........
11.07.2017 09:49:07
Matthias
Hallo
Bin immer noch nicht sicher ob ich Dich verstanden habe.
Versuch mal das:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim multibereich1_neu As Object
Set multibereich1_neu = Union(Range("multibereich1_neu"), Range("namname"))
If Not Intersect(Target, multibereich1_neu) Is Nothing Then
MsgBox "im Bereich"
Else
MsgBox "nicht im Bereich"
End If
End Sub
Gruß Matthias
Anzeige
Habe dir Datei erstellt......lg
11.07.2017 10:22:42
STeve
Hi Matthias.
Hier deine Datei umgeschrieben.
Im Modul 1 werden jetzt
multibereich1_neu (das ist ein name) und der
multibereich2_neu (das ist ein name) zu
multibereichalles_neu (das ist eine union)
zusammengefasst..................
https://www.herber.de/bbs/user/114801.xlsm
Bitte schau dir das mal an......Danke
Anzeige
es funktioniert doch alles ... owT
11.07.2017 10:33:20
Matthias
hab was gefunden ...
11.07.2017 11:39:42
Matthias
Hallo
Hatt dei Auskommentierung nicht gelesen, sorry.
Was mir aufgefallen ist:
If InStr(namName.RefersTo, ActiveSheet.Name) > 0 And Left(namName.Name, 4) = "multi" Then
multi sind aber 5 Zeichen
So kommst Du also überhaupt nicht zu den inneren If-Abfragen.
Hab jetzt aber keine Zeit mehr.
Gruß Matthias
Anzeige
hier nochmal die Datei......lg
11.07.2017 14:51:41
STeve
Hallo Matthias.
Hatte in der Muster-Datei zwei Fehler.....Jetzt behoben.
Siehe bitte datei:
https://www.herber.de/bbs/user/114810.xlsm
Die zwei - mit Namensmanager definierten - Bereiche werden mit dem Modul1 zu der Union multibereichalles_neu (diese Union scheint aber nicht im Namensmanager auf) zusammengefasst.
Wenn du jetzt in Bereich 1 oder 2 klickst funktioniert es wunderbar:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, multibereichalles_neu) Is Nothing Then
MsgBox "im Bereich"
Else
MsgBox "nicht im Bereich"
End If
End Sub
...........aber nicht in meiner Datei.....kann das etwas mit dem zutun haben, dass in der hier eingestellten Musterdatei nur ein Blatt ist und in meiner mehrere Blätter?
Danke für deine weitere Hilfe und Tipps.
lg STeve
Anzeige
AW: Intersect (Target,........) Is Nothing Then
11.07.2017 08:13:41
Luschi
Hallo STeve,
das funktioniert so:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect([multibereich1_neu], Target) Is Nothing) Then
MsgBox Target.Address
End If
If Not (Intersect(ThisWorkbook.Names("multibereich1_neu").RefersToRange, Target) Is Nothing) _
Then
MsgBox Target.Address
End If
End Sub
Mit freundlichem Gruß
Luschi
aus klein-Paris
Anzeige
Ereignis ?
11.07.2017 09:04:05
STeve
Guten Morgen Luschi.......danke für deine Antwort.
Frage:
Wieso hier das
Private Sub Worksheet_Change(ByVal Target As Range)
Ereignis?
mfg
zusätzliche Info für euch.......
11.07.2017 09:25:15
STeve
multibereich1_neu ist ein Union Bereich.
Set multibereich1_neu = Union(multibereich1_neu, namName.RefersToRange)
Luschi:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect([multibereich1_neu], Target) Is Nothing) Then 'geht nicht
oder
If Not (Intersect(ThisWorkbook.Names("multibereich1_neu").RefersToRange, Target) Is Nothing)Then'geht auch nicht
mfg
STeve
Anzeige
wieder auf offen.....Union soll bestehen bleiben
11.07.2017 17:42:12
STeve
Möchte nochmal auf offen stellen und folgende Frage/Bitte:
Siehe bitte datei:
https://www.herber.de/bbs/user/114810.xlsm
Die zwei - mit Namensmanager definierten - Bereiche (multibereich1_neu und multibereich2_neu) werden mit dem Modul1 zu der Union multibereichalles_neu (diese Union scheint aber nicht im Namensmanager auf) zusammengefasst.
Wenn du jetzt in Bereich 1 oder 2 klickst funktioniert es wunderbar:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, multibereichalles_neu) Is Nothing Then
MsgBox "im Bereich"
Else
MsgBox "nicht im Bereich"
End If
End Sub
Es wird erkannt dass die beiden Bereiche eine Union sind. Wenn ich die Datei aber schließe und wieder öffne muss wieder das Modul1 neu gestartet werden dass die Union besteht.
Bitte um Lösung wie die Unionzusammenführung nicht bei jeder Öffnung neu gemacht werden muss?
Danke für eure weitere Hilfe und Tipps.
lg STeve
Anzeige
AW: wieder auf offen.....Union soll bestehen bleiben
11.07.2017 18:22:08
Luschi
Hallo STeve,
hier alle 3 schon mal vorgestellten Varianten mit den richtig geschriebenen definierten Namen:

Die Datei https://www.herber.de/bbs/user/114818.xlsm wurde aus Datenschutzgründen gelöscht


Gruß von Luschi
aus klein-Paris
Anzeige
AW: wieder auf offen.....Union soll bestehen bleiben
11.07.2017 21:08:28
STeve
Hallo sehr geehrter Luschi.......deine drei Varianten laufen perfekt ..so sollte es sein.
Ich habe ja nicht nur die zwei multi1 und 2 bereiche sondern bis zu 60, die immer verschieden heißen und mit langen komplizierten Namen definiert werden.
Aber schau mal hier: (habe in deine Datei nur mal 20 multi- bereiche erstellt und per def. Namen vergeben)

Die Datei https://www.herber.de/bbs/user/114822.xlsm wurde aus Datenschutzgründen gelöscht


Deshalb habe ich im Modul1 die:

Sub zusammenfassung()
End Sub eingebaut (von Beverly) diese fasst die ganzen namen per Schleife zusammen------ eben zu dem multibereichalles_neu
Deine Varianten kann ich leider nicht umsetzen.
Ich müsste
1.) die Namen wissen
2.) die Anzahl wissen
3.) deine Codes so ausarbeiten:
Intersect(Target, Union([multi1], [multi2], [multi3], [multi4], [multi5], [multi6], [multi7] _
[multi8], [multi9], [multi10], [multi11], [multi12], [multi13], [multi14]......
.................usw bis 60 und alles immer verschiedene und lange komplizierte Namen))
Das heißt: die ganzen Bereiche werden bei Erstellung des Blattes zusammengefasst und dann soll der in einen Begriff (multibereichalles_neu) erhalten bleiben.
Besten Dank für deine Hilfe
mfg
STeve
Anzeige
AW: wieder auf offen.....Union soll bestehen bleiben
12.07.2017 08:01:49
Luschi
Hallo STeve,
hier die angepaßte Version auf Grundlage von Beverlys Zusammenfassungs-Sub.
https://www.herber.de/bbs/user/114824.xlsm
Gruß von Luschi
aus klein-Paris
Luschi aus Klein Paris............gewaltig
12.07.2017 08:18:34
STeve
Guten Morgen lieber Luschi aus Klein Paris..........einfach gewaltig. DANKE das ist es.
Da bin ich jetzt mal eine Woche aufgeräumt :-) diese Funktion in meine Datei einzuarbeiten.
Ich hoffe es gelingt mir ansonsten hoffe ich darf mich speziell an dich wenden bevor ich "kolabiere"
Danke für deine Mühen...wünsche einen schönen Tag.
LG STeve
Anzeige
Luschi brauche noch deine Hilfe......lg
12.07.2017 15:25:19
STeve
Hi Luschi.........komme nicht weiter.
Siehe hier:
'alle Namen mit gleichem Namensanfang zusammenfassen in einem Range-Bereich
Function ZusFsgNamen(xWelcheTab As Worksheet, xWelcheNamen As String) As Range
Dim namName As Name, i As Integer
i = Len(xWelcheNamen)
For Each namName In ActiveWorkbook.Names
Debug.Print InStr(Replace(namName.RefersTo, "'", ""), ActiveSheet.Name & "!") 'es zeigt  _
richtig den Wert 2 an
Debug.Print LCase(Left(namName.Name, i))  ' es zeigt auch den richtigen String Wert an
' wenn der Bezug den Namen des aktiven Tabellenblattes enthält
If InStr(Replace(namName.RefersTo, "'", ""), ActiveSheet.Name & "!") > 0 And _
LCase(Left(namName.Name, i)) = xWelcheNamen Then
'''''''''''# hier kommt er aber nie rein.......weiß du was da los ist?
' Variable ist noch leer
If multibereich1_neu Is Nothing Then
' der Variablen den Bezugsbereich des laufenden Namen zuweisen
Set multibereich1_neu = namName.RefersToRange
' Variable ist schon gefüllt
Else
' die Variable um den Bezugsbereich des laufenden Namen erweitern
Set multibereich1_neu = Union(multibereich1_neu, namName.RefersToRange)
End If
End If
Next namName
Set ZusFsgNamen = multibereich1_neu
End Function

mfg STeve..........der bald verzweifelt
Anzeige
Danke Luschi.........habe Fehler gefunden
12.07.2017 16:37:22
STeve
Hallo Luschi.......hat sich erledigt...bin schon weitergekommen.
LCase.....war der Übeltäter.....
LCase(Left(namName.Name, i)) = xWelcheNamen Then
Danke und mfg
STeve
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Intersect in Excel VBA: Anwendung und Fehlerbehebung


Schritt-für-Schritt-Anleitung

Um die Intersect-Funktion in Excel VBA korrekt zu verwenden, befolge diese Schritte:

  1. Öffne das VBA-Editor-Fenster in Excel (Alt + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).

  3. Schreibe eine Subroutine, in der du die Intersect-Funktion einsetzt. Hier ist ein einfaches Beispiel:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       If Not Intersect(Target, Range("C2:AG19")) Is Nothing Then
           MsgBox "Im definierten Bereich."
       Else
           MsgBox "Nicht im definierten Bereich."
       End If
    End Sub
  4. Teste den Code, indem du in verschiedene Zellen klickst.

Wenn du einen benannten Bereich verwenden möchtest, achte darauf, dass dieser korrekt definiert ist. Beispiel:

If Not Intersect(Target, Range("multibereich1_neu")) Is Nothing Then
    MsgBox "Im Bereich."
End If

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004 - Methode 'Intersect' für Objekt '_Global' fehlgeschlagen:

    • Ursache: Der definierte Bereich existiert nicht oder ist nicht korrekt benannt.
    • Lösung: Überprüfe, ob der Name im Namensmanager korrekt definiert ist.
  • Laufzeitfehler: Methode 'Range' für das Objekt _Worksheet ist fehlgeschlagen:

    • Ursache: Der Range-Name ist nicht vorhanden oder wird nicht im aktuellen Kontext erkannt.
    • Lösung: Stelle sicher, dass der Name korrekt ist und im aktiven Arbeitsblatt verwendet werden kann.
  • If Not Intersect(Target, multibereich1_neu) Is Nothing funktioniert nicht:

    • Ursache: multibereich1_neu könnte nicht als Range definiert sein.
    • Lösung: Überprüfe die Definition von multibereich1_neu. Verwende die Union-Funktion, wenn du mehrere Bereiche kombinierst.

Alternative Methoden

Wenn du mehrere Bereiche kombinieren möchtest, kannst du die Union-Funktion verwenden:

Dim multibereich1_neu As Range
Set multibereich1_neu = Union(Range("Bereich1"), Range("Bereich2"))
If Not Intersect(Target, multibereich1_neu) Is Nothing Then
    MsgBox "Im kombinierten Bereich."
End If

Eine andere Möglichkeit ist die Verwendung von Application.Intersect, um eine genauere Kontrolle über die Intersektion zu erhalten:

If Not Application.Intersect(Target, Range("C2:AG19")) Is Nothing Then
    MsgBox "Bereich erkannt."
End If

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung der Intersect-Funktion:

  1. Beispiel für den Worksheet_Change-Ereignis:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
           MsgBox "Änderung in A1:A10 erkannt."
       End If
    End Sub
  2. Verwendung von benannten Bereichen:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       If Not Intersect(Target, ThisWorkbook.Names("multibereich1_neu").RefersToRange) Is Nothing Then
           MsgBox "Im definierten Bereich."
       End If
    End Sub

Tipps für Profis

  • Verwende Debugging: Nutze Debug.Print um die Werte von Variablen während der Ausführung zu überprüfen.
  • Strukturierte Benennung: Achte auf eine klare und konsistente Benennung deiner Bereiche, um Verwechslungen zu vermeiden.
  • Error Handling: Implementiere Fehlerbehandlung, um Laufzeitfehler abzufangen, z.B.:

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0

FAQ: Häufige Fragen

1. Was macht die Intersect-Funktion in VBA? Die Intersect-Funktion überprüft, ob zwei oder mehr Bereiche sich überschneiden, und gibt den Bereich der Schnittmenge zurück.

2. Wie kann ich mehrere Bereiche mit Union kombinieren? Verwende die Union-Funktion, um mehrere Bereiche zu einem neuen Range-Objekt zusammenzufassen.

3. Was sind die häufigsten Fehler beim Arbeiten mit Intersect? Typische Fehler sind ungültige Bereichsnamen oder das Arbeiten mit Bereichen, die nicht im aktuellen Kontext sichtbar sind.

4. Wie kann ich sicherstellen, dass ein benannter Bereich dynamisch bleibt? Du kannst die Definition des benannten Bereichs im Namensmanager überprüfen und sicherstellen, dass sie auf die gewünschten Zellen verweist.

5. Was ist der Unterschied zwischen Intersect und Application.Intersect? Intersect ist die Methode, die direkt auf Range-Objekten aufgerufen wird, während Application.Intersect eine Methode ist, die auf die gesamte Anwendung angewendet wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige