Anzeige
Archiv - Navigation
1192to1196
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

intercept soll auslösende Zell.Adresse melden

intercept soll auslösende Zell.Adresse melden
Jörg
Hallo Forum,
seit einigen Tagen fummle ich schon an einer Lösung zu folgendem Problem:
bei einer Änderung in einer Zelle soll intercept mir diese auslösende Zelle mitteilen, damit ich sie durch ein Makro in eine andere Tabelle kopieren kann. Ich habe das auch schon mit einer Function versucht, was - wie ich nun endlich kapiert habe nicht geht.
Ein freundlicher ExcelProfi hat mir folgenden Code empfohlen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim Aktuell As Variant
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("G1:I303")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' Display a message when one of the designated cells has been
' changed.
' Place your code here.
'MsgBox "Cell " & Target.Address & " has changed."
Aktuell = Target.Address
'Aktuell = Target.Offset(0, 17).Value
MsgBox "Nr: " & Aktuell
End If
End Sub
Das klappt soweit. Aber wie bekomme ich jetzt die Adresse als "Zeilennummer" (Integer), dass ich sie
an ein Makro zur Weiterverabeitung (Kopiere die Zeile in ein Tabellenblatt, sortiere die nach jüngstem Ereignis, gib das an ein Userform weiter).... durchrreichen kann?
Es geht mir also nur um die Übergabe der AuslöseZellAdresse (Row) als Integer-Wert an ein Makro "KopiereBöseZeile":-)
Der freundliche Mensch im Forum hatte sich leider nicht mehr gemeldet - was ich ihm keinesfalls vorwerfe,
hab auch schon Knatsch mit meiner besseren Hälfte wegen "nur noch an der Kiste ..." :-))
Ich möchte nun obigen Code neu aufgreifen und hoffe auf Eure Unterstützung.
Vielen Dank im Voraus
und 'nen guten Rutsch
Jörg
AW: intercept soll auslösende Zell.Adresse melden
31.12.2010 14:52:23
Franc
das geht einfacher als man denkt ^^
Reihe = target.row
Spalte = target.column
AW: intercept soll auslösende Zell.Adresse melden
31.12.2010 15:13:08
Jörg
Hallo Franc,
vielen Dank (habe ich schon befürchtet, dass es so einfach ist ... Schande :-)
Habe es gleich umgesetz; leider gibt es die Variablenwerte nicht an das Modul weiter
Public Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim Aktuell As Variant
Dim Reihe As Integer
Dim Spalte As Integer
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("G1:I303")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' Display a message when one of the designated cells has been
' changed.
' Place your code here.
'MsgBox "Cell " & Target.Address & " has changed."
Aktuell = Target.Address
'Aktuell = Target.Offset(0, 17).Value
MsgBox "Nr: " & Aktuell
Reihe = Target.Row
Spalte = Target.Column
MsgBox "Reihe " & Reihe & Chr(13) & "Spalte " & Spalte 'klappt
Call ZeigeAdresse 'Zeige jeweils Null an
End If
End Sub

In der Tabelle läuft das auch wunderbar. Nur das Modul ZeigeAdresse nimmt keine Werte aus Intercept an.
Public Sub ZeigeAdresse() 'wird später KopiereBöseZeile ....
MsgBox "Reihe " & Reihe & Chr(13) & "Spalte " & Spalte
End Sub
Ist bestimmt auch einfach :-)
Danke
Jörg
Anzeige
AW: intercept soll auslösende Zell.Adresse melden
31.12.2010 15:17:07
Josef

Hallo Jörg,
natürlich musst du deiner Prozedur die Parameter übergeben.
ZeigeAdresse Target.Row, Target.Column


Public Sub ZeigeAdresse(Zeile As Long, Spalte As Long) 'wird später KopiereBöseZeile ....
  MsgBox Zeile & vbLf & Spalte
End Sub


Gruß Sepp

Anzeige
AW: intercept soll auslösende Zell.Adresse melden
31.12.2010 16:03:33
ransi
HAllo Jörg
Übergib die Zeile und die Spalte als Argument.
Ausserdem solltest du im Worksheet_change ncoh abfangen das jemand mehrere Zellen aufeinmal ändert.
Versuch mal:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Public Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim Aktuell As Variant
    Dim Reihe As Integer
    Dim Spalte As Integer
    Dim Zelle As Range
    Dim bereich As Range
    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("G1:I303")
    Set bereich = Application.Intersect(KeyCells, Target)
    If Not bereich Is Nothing Then
        For Each Zelle In bereich
            ' Display a message when one of the designated cells has been
            ' changed.
            ' Place your code here.
            'MsgBox "Cell " & Target.Address & " has changed."
            Aktuell = Zelle.Address
            'Aktuell = Target.Offset(0, 17).Value
            MsgBox "Nr: " & Aktuell
            Reihe = Zelle.Row
            Spalte = Zelle.Column
            Call ZeigeAdresse(Reihe, Spalte)
        Next
    End If
End Sub


' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub ZeigeAdresse(ByVal myZeile As Long, ByVal mySpalte As Integer) 'wird später KopiereBöseZeile ....
    MsgBox "Reihe " & myZeile & Chr(13) & "Spalte " & mySpalte
End Sub


ransi
Anzeige
AW: intercept soll auslösende Zell.Adresse melden
31.12.2010 16:49:25
Jörg
Euch Drei meinen herzlichen Dank,
genau daran habe ich erfolglos herumlaboriert. Wenn ich den Code so lese, komm ich einigermaßen mit; das aber selbst (mit dem derzeitigen Wissen) auf die Beine zu kriegen war mir halt versagt.
Das bringt mich jetzt um Einiges weiter. Nun kann ich versuchen ein akzeptables (funktionierendes) Ende in der Sache zu erreichen.
Schön so schnell, so gute Lösungen bekommen zu haben.
Ein guten Rutsch ins neue Jahr...
Jörg :-)
AW: intercept soll auslösende Zell.Adresse melden
31.12.2010 19:26:02
Jörg
Ich muss doch nochmal fragen ...
Im Trockenlauf hat alles gut funktioniert. Wenn ich einen Wert änderte sprang Intercept an und kopierte wunschgemäß die auslösende Zeile.
Das Problem: im Hintergrund läuft im Vollbetrieb die Zeit sekundenweise, wird in einer Userform angezeigt.
Hier reagiert Intercept nicht mehr. Eine durch Wenn(Zeitvergleich) verursachte Änderung
im intercept-überwachten Bereich bekommt Intercept nicht mit.
Gib es da was, das ich ändern kann ?
Gruß
Jörg
Anzeige
AW: intercept soll auslösende Zell.Adresse melden
31.12.2010 19:37:12
Josef

Hallo Jörg,
warum pachst du das ganze nict gleich in den Code des UF?
P.S.: Es heißt Intersect und nicht Intercept.

Gruß Sepp

AW: intercept soll auslösende Zell.Adresse melden
31.12.2010 19:43:17
Jörg
Ich muss doch nochmal fragen ...
Im Trockenlauf hat alles gut funktioniert. Wenn ich einen Wert änderte sprang Intercept an und kopierte wunschgemäß die auslösende Zeile.
Das Problem: im Hintergrund läuft im Vollbetrieb die Zeit sekundenweise, wird in einer Userform angezeigt.
Hier reagiert Intercept nicht mehr. Eine durch Wenn(Zeitvergleich) verursachte Änderung
im intercept-überwachten Bereich bekommt Intercept nicht mit.
Gib es da was, das ich ändern kann ?
Gruß
Jörg
Anzeige
Das ist die Intersect-Methode der Application
31.12.2010 20:11:41
ransi
HAllo Jörg
Eine durch Wenn(Zeitvergleich) verursachte Änderung
im intersect-überwachten Bereich bekommt Intersect nicht mit.

Das ist nunmal so:
Das Worksheet_Change springt nicht an wenn ein Wert mit einer Formel geändert wird.
Das ist nunmal so.
Wenn du die Zeit doch in der Userform anzeigst, kannst du sie auch dort überwachen.
Dann hast du deinen "Starter" für dein Makro.
ransi
AW: Das ist die Intersect-Methode der Application
01.01.2011 15:50:43
Jörg
Hallo Ransi, Hallo Forum,
danke für den Tipp. Ich greife nun doch eine Lösung von vor einigen Tagen auf, auf welche ich zur folgenden Frage leider keine Antwort bekam.
Wie erhalte ich aus D.keys in eine Integervariable ZeilenNummer ?
Weißt Du/ihr hier etwas zu sagen?
Hier der Code eines Weisen names Phelan:
Dim arVgl As Variant
Private Sub Worksheet_Calculate()
Dim i As Long
Dim k As Integer
Dim ar As Variant
Dim D As Object
Set D = CreateObject("Scripting.Dictionary")
ar = Range("G1:I303")
If Not IsArray(arVgl) Then arVgl = ar
For i = 1 To UBound(ar)
For k = 1 To UBound(ar, 2)
If ar(i, k)  arVgl(i, k) Then
If ar(i, k) = 1 Then
D(i) = 0
End If
End If
Next
Next
If D.Count Then
MsgBox "Treffer in der Zeile:" & vbLf & Join(D.keys, vbLf)
End If
arVgl = ar
'Sheets("aktionen").Range(Cells(ZeilenNummer, 2), Cells(ZeilenNummer, 9)).Select
'Sheets("aktionen").Range(Cells(ZeilenNummer, 2), Cells(ZeilenNummer, 9)).Activate
'Selection.Copy
'Worksheets("EreignisDummy").Activate
'ActiveSheet.Paste
End Sub

Das gute Stück funktioniert auch während eines Zeitlaufs... Ich kann halt nicht mit der Variable D.keys
anfangen...
Danke im Voraus
und ein gutes Neues
Jörg
Anzeige
AW: Das ist die Intersect-Methode der Application
02.01.2011 20:26:10
Jörg
Hallo,
um die Sache zum Ende zu bringen; ich habe es nach einigem hin und her eingermaßen kapiert. Eine Überwachung während einer laufenden Zeit geht mit ubound und nicht mit intersect. Den Code von Phelan habe ich so ergänzen können, dass ich eine Zeilennr. rausbekomme. Mit der wird dann das Modul zum kopieren aufgerufen....
Dim arVgl As Variant
Private Sub Worksheet_Calculate()
Dim i As Long        'Zeile in der Tabelle / Feld
Dim k As Integer     'Spalte in der Tabelle / Feld
Dim ar As Variant    'zu überwachender Bereich
Dim D As Object      'siehe unten
Dim Azeile As Long
Dim Status As Long
Set D = CreateObject("Scripting.Dictionary")
ar = Range("G1:I303")
If Not IsArray(arVgl) Then arVgl = ar
For i = 1 To UBound(ar)
For k = 1 To UBound(ar, 2)
If ar(i, k)  arVgl(i, k) Then
If ar(i, k) = 1 Then 'Eine Zelle hat den Wert 1 für Ereignis eingetroffen =Wenn(A1= _
B1;1;0)
D(i) = 0
Azeile = i 'Übertrage den Wert von i auf Azeile
KopiereAktion Azeile 'Rufe Modul KopiereAktion mit dem Wert Azeile auf
End If
End If
Next
Next
arVgl = ar
End Sub
Nochmals vielen Dank für Eure Hilfe :-)
Jörg
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige