Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

If Not Intersect(Target, Range

Forumthread: If Not Intersect(Target, Range

If Not Intersect(Target, Range
25.01.2019 12:47:42
Marco
Hallo liebes Forum
Habe in Spalte 2 also B5:B26 Exceldropdows erstellt, die bei einem Wechsel
den Listeneintrag in der Spalte suchen soll und in der Activen Zeile einfügen soll.
Leider stürzt Excel bei meinem Code leider ab.Woran kann es liegen?
Hier mal der Code
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim i As Integer
Dim j As Integer
For i = 5 To 26
If Cells(i, 2) = Cells(ActiveCell.Row, 2) Then
If Not i = ActiveCell.Row Then
If Not Intersect(Target, Range("B5:B26")) Is Nothing Then
zeile1 = ActiveCell.Row
zeile2 = i
Range("A5").Select
Selection = ActiveCell
For j = 2 To 366
Cells(zeile1, j) = Cells(zeile2, j)
Cells(zeile2, j) = ""
Next j
End If
End If
End If
Next i
End Sub

Anzeige

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 12:58:11
Daniel
Hallo Marco,
da fehlt das Application.ScreenUpdating = True am Ende. Weiß aber nicht ob das der Grund ist.
Gruß
Daniel
AW: If Not Intersect(Target, Range
25.01.2019 13:02:10
Marco
daran liegt es nicht
AW: If Not Intersect(Target, Range
25.01.2019 13:11:16
Daniel
Habs mal bei mir getestet, natürlich ohne Daten.
zeile1 und zeile2 sind nicht deklariert, falls das bei dir nicht hochkommt würde ich dringend empfehlen Option Explicit einzuschalten.
Der Code läuft natürlich einige Momente aber einen Absturz oder andere Fehler hatte ich nicht. Kannst du noch die Tabelle hochladen? Ansonsten bräuchten wir noch mehr Infos um da weiter zu kommen.
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 13:13:30
Marco
zeile1 und zeile2 sind unter Option Explicit deklariert
AW: If Not Intersect(Target, Range
25.01.2019 13:15:06
Daniel
Hast du aber nicht geschrieben. Mit Teilinfos macht man es Helfern nicht gerade leichter.
AW: If Not Intersect(Target, Range
25.01.2019 13:13:55
Daniel
Scheint ja einige Lösungsansätze zu geben, insofern nicht mehr offen.
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 13:16:46
Marco
Code läuft, aber für einen Moment erhält Excel keine Rückmeldung und dann läuft Excel wieder mit ausgeführten Code
AW: If Not Intersect(Target, Range
25.01.2019 13:18:27
onur
Poste doch endlich mal die Datei.
AW: If Not Intersect(Target, Range
25.01.2019 13:30:20
onur
Was soll genau passieren, wenn was passiert?
Soll heissen: Wozu dient das Makro ?
Bitte ohne irgendwelche VBA- Ausdrücke zu verwenden.
z.B.:"Wenn ich in Spalte B das und das eingebe, soll das und das passieren".
AW: If Not Intersect(Target, Range
25.01.2019 13:33:19
Marco
Bei einem Schichttausch soll die gesammte Zeile in die aktive Zeile übernommen werden und die gefundene Zeile gelöscht werden!
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 13:34:38
Daniel
Funktioniert bei mir jetzt auch mit deiner Tabelle. Hast du schon probiert Events auszustellen?
AW: If Not Intersect(Target, Range
25.01.2019 13:36:31
Marco
Funktioniert jetzt tadellos! Wie gesagt hatte einen Rechtschreibfehler drin!
Aber nochmals danke!
AW: If Not Intersect(Target, Range
25.01.2019 13:20:10
Daniel
Onur und Rudi haben doch schon klargestellt, dass es Probleme mit Dauerschleifen gibt. Setz doch da erst mal an.
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 13:09:55
onur
Target ist die Zelle, die das Change-Event ausgelöst hat, aber sie wird nirgendwo benutzt, d.h. es läuft immer das gleiche, egal welche Zelle verändert wurde.
Da EnableEvents= true ist, wird jedes mal, wenn das Makro eine Zelle im Range("B5:B26") verändert hat, das Change-Event wieder ausgelöst und du hast eine Endlosschleife.
Das Change-Event sollte man nur verwenden, wenn man es wirklich versteht und auch wirlich weiss, was man da tut.
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 13:06:00
Rudi
Hallo,
der Code ruft sich hier
            For j = 2 To 366
Cells(zeile1, j) = Cells(zeile2, j)
Cells(zeile2, j) = ""
Next j

immer wieder selbst auf.
Setze Application.Enabeleevents =False davor. Wieder auf True stellen nicht vergessen.
Gruß
Rudi
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 13:10:26
Marco
laufzeitfehler 438
AW: If Not Intersect(Target, Range
25.01.2019 13:23:20
Daniel
Application.EnableEvents = False
Cells(zeile1, j) = Cells(zeile2, j)
Cells(zeile2, j) = ""
Application.EnableEvents = True
Damit läuft er bei mir in einer Sekunde durch - natürlich immer noch ohne Daten.
AW: If Not Intersect(Target, Range
25.01.2019 13:30:54
Marco
Sorry, hatte ein Rechtschreibfehler drin!
Funktioniert jetzt!
Vielen dank erst mal für die schnelle Hilfe
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 13:41:45
Marco
Funktioniert super.
Danke für die hilfe
AW: If Not Intersect(Target, Range
25.01.2019 13:09:24
Luschi
Hallo Marco,
in diesem Code geht so Einiges schief:
- Target repräsentiert als Übergabeparameter die Zelle(n)
- in der der Zellwert sich verändert hat - was willst Du da mit ActiveCell?
- denn zu diesem Zeitpunkt steht ActiveCell für die Zelle, wohin der Cursor
  nach der Eingabe gesprungen ist
- und somit haben Target & ActiveCell nichts miteinaner zu tun
- und Target ist das Maß aller Dinge
- man muß zuerst prüfen, ob Target nur aus einer Zelle besteht

If Target.Count > 1 Then
Exit Sub
Endif
- und dann If Not (Intersect(Target, Range("B5:B26")) Is Nothing) Then
Vielleicht entschließt Du Dich doch, eine kleine Demodatei mit 1-2 Gültigkeits-Datenzellen hier einzustellen.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 13:59:39
Marco
Hallo Luschi
wenn ich den rausnehmen würde, würde ja der Code bei Änderung bei jeder Zelle ausgeführt.
soll aber nur in den Zellen B5:B26 ausgeführt werden!
Bin auch kein Profi in VBA, nur ein kleiner Anfänger!
Funktioniert jetzt aber so
For j = 2 To 366
Application.EnableEvents = False
Cells(zeile1, j) = Cells(zeile2, j)
Cells(zeile2, j) = ""
Application.EnableEvents = True
Next j
Anzeige
AW: If Not Intersect(Target, Range
25.01.2019 15:03:24
onur
Frage zu deiner Datei:
Müsste nicht jeder Name nur einmal auftauchen?
Oder haben Mitarbeiter mehrere Schichten?
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Wenn nicht Intersect(Target, Range)


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel, indem du Alt + F11 drückst.

  2. Wähle das entsprechende Arbeitsblatt im Projektfenster aus, in dem du das Makro implementieren möchtest.

  3. Füge den folgenden Code in das Arbeitsblattmodul ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Application.ScreenUpdating = False
       Dim zeile1 As Long, zeile2 As Long
       Dim i As Integer
       Dim j As Integer
    
       If Not Intersect(Target, Range("B5:B26")) Is Nothing Then
           For i = 5 To 26
               If Cells(i, 2) = Target.Value Then
                   If Not i = Target.Row Then
                       zeile1 = Target.Row
                       zeile2 = i
                       For j = 2 To 366
                           Cells(zeile1, j) = Cells(zeile2, j)
                           Cells(zeile2, j) = ""
                       Next j
                   End If
               End If
           Next i
       End If
       Application.ScreenUpdating = True
    End Sub
  4. Speichere die Datei als Makro-aktivierte Arbeitsmappe (.xlsm).

  5. Teste das Makro, indem du eine Zelle innerhalb des Bereichs B5:B26 änderst.


Häufige Fehler und Lösungen

  • Excel stürzt ab: Stelle sicher, dass Application.EnableEvents deaktiviert ist, bevor du Zellen veränderst, und aktiviere es danach wieder.

    Application.EnableEvents = False
    ' Zellenänderungscode
    Application.EnableEvents = True
  • Laufzeitfehler 438: Überprüfe, ob die Variablen zeile1 und zeile2 deklariert sind. Füge Option Explicit oben im Modul hinzu.

  • Endlosschleife: Wenn dein Makro ständig neu ausgelöst wird, stelle sicher, dass du If Not Intersect(Target, Range("B5:B26")) Is Nothing korrekt implementierst.


Alternative Methoden

Eine alternative Methode zur Verwendung von Intersect ist die Verwendung von Application.Intersect. Diese Methode ist besonders nützlich, wenn du mit mehreren Bereichen gleichzeitig arbeitest:

If Not Application.Intersect(Target, Me.Range("B5:B26")) Is Nothing Then
    ' Dein Code hier
End If

Praktische Beispiele

Wenn du in der Zelle B5 einen neuen Wert eingibst und dieser Wert bereits in B5:B26 vorhanden ist, wird die gesamte Zeile, die diesem Wert entspricht, in die aktive Zeile kopiert und die ursprüngliche Zeile gelöscht.


Tipps für Profis

  • Verwende Option Explicit: Dies hilft, unbeabsichtigte Fehler zu vermeiden, da alle Variablen deklariert werden müssen.

  • Debugging: Nutze die Debug.Print-Anweisung, um Werte während der Ausführung zu überwachen.

    Debug.Print "Aktuelle Zeile: " & zeile1
  • Optimierung: Wenn dein Makro große Datenmengen verarbeitet, erwäge, Application.Calculation auf xlCalculationManual zu setzen, um die Berechnung zu optimieren.


FAQ: Häufige Fragen

1. Was ist Intersect in Excel VBA?
Intersect überprüft, ob sich zwei Bereiche überschneiden. Es gibt Nothing zurück, wenn sie sich nicht überschneiden.

2. Wie verhindere ich, dass mein Makro in eine Endlosschleife gerät?
Stelle sicher, dass du Application.EnableEvents deaktivierst, während dein Makro Änderungen an Zellen vornimmt, um zu verhindern, dass das Change-Event erneut ausgelöst wird.

3. Wie deklariere ich Variablen in VBA?
Verwende Dim, um Variablen zu deklarieren. Zum Beispiel: Dim zeile1 As Long.

4. Was passiert, wenn ich ActiveCell anstelle von Target verwende?
ActiveCell bezieht sich auf die Zelle, die zur Zeit des Makros aktiv ist. Du solltest Target verwenden, da es die Zelle repräsentiert, die die Änderung ausgelöst hat.

5. Warum funktioniert mein Code nicht wie erwartet?
Überprüfe die Verwendung von If Not Intersect und stelle sicher, dass du den richtigen Bereich angibst. Debugging kann helfen, das Problem zu identifizieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige