VBA: Ereignis bei Änderung eines Zelleninhaltes.

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: VBA: Ereignis bei Änderung eines Zelleninhaltes. von: Horst
Geschrieben am: 23.03.2005 17:43:49

Hallo liebe Herber's Forum-Freunde,

hier habe ich wieder eine Frage zu VBA:

Mit folgendem Code habe ich versucht, die Zellen eines bestimmten Bereiches auf Änderungen deren Inhalte zu überwachen:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Cells_in_Focus As Range
Dim Total_Focus As Range

Set Cells_in_Focus = Range("AN11:AP200")
Set Total_Focus = Cells_in_Focus

If Intersect(Target, Total_Focus) Is Nothing Then
Exit Sub
End If

Im Test mit dem Debugger hat das bei Eingabe eines Wertes in eine der Zellen in dem definierten Bereich auch einwandfrei funktioniert.
Nun aber, nachdem ich die erste Version meines Moduls "produktiv" machen wollte, reagiert VBA nicht mehr auf Änderungen der Inhalte dieser Zellen.
Dazu muss aber erwähnt werden, dass die Werte über eine DDE Schnittstelle automatisch über ein Java Applet verändert werden.

Gibt es eine besser geignete Befehlsfolge als das Worksheet_Change ... ?

Für jeden Hinweis wäre ich dankbar.

In Verzweiflung,
Horst

Bild


Betrifft: AW: VBA: Ereignis bei Änderung eines Zelleninhaltes. von: Bert
Geschrieben am: 23.03.2005 17:58:01

Wenn dir eine garantiert frei Zelle zur Verfügung steht, schreib da eine Formel rein
z.B. Anzahl2(AN11:AP200) und nutze das Calculate-Ereignis.

Bert


Bild


Betrifft: Aber nur wenn keine weiteren Formel auf der ... von: Dominic
Geschrieben am: 23.03.2005 18:07:11

sheet gibt, weil dann immer wieder der Code laufen wird.

Gruß
Dominic


Bild


Betrifft: AW: Aber nur wenn keine weiteren Formel auf der ... von: Dominic
Geschrieben am: 23.03.2005 18:08:23

Eine Beispieldatei:

https://www.herber.de/bbs/user/20097.xls

Gruß
Dominic


Bild


Betrifft: AW: Aber nur wenn keine weiteren Formel auf der .. von: Horst
Geschrieben am: 23.03.2005 18:25:59

Hallo Dominic,
vielen Dank für Deinen Hinweis und das Beispiel zur Empfehlung von Bert.
Da ich aber Dauer-VBA-Anfänger bin, weiß ich leider nicht, wie ich "Tabelle2" erzeugen kann ohne gleichzeitig ein neues Tabellenblatt in Excel anzulegen (so wie in Deinem Beispiel).
Wenn ich das richtig verstehe, dann muss der Code für die Logik, welche durch das Ereignis ausgelöst wird, in diesem separaten Blatt sein. Ist das richtig ?

Kannst Du mir da noch etwas detaillierter weiterhelfen ? Vielen Dank im Voraus.

Gruß,
Horst


Bild


Betrifft: AW: Aber nur wenn keine weiteren Formel auf der .. von: Dominic
Geschrieben am: 24.03.2005 09:38:44

Bin wieder da.

Das neue Tabellenblatt erstellst Du wie normal, aber danach kannst Du diese über Format Blatt ausblenden. Vorher erstellst Du aber noch irgendwo eine Summenformel für den gegebenen Bereich. Und der Code wird dann über das Ergebnis des neuen Tabellenblattes gesteuert.
Eine andere Lösung kann sein wenn Du den Ereignis Selection_Change benutzt. Wenn Du in einer der Zellen was eingibst und danach Enter drückst, wird eine andere Zelle selektiert (entweder der untere, obere, rechte, linke Zelle). Anbei habe ich ein Beispiel dafür:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a As Long
Dim b As Long
b = 40
a = 11
If Application.MoveAfterReturnDirection = xlToRight Then
b = b + 1
ElseIf Application.MoveAfterReturnDirection = xlUp Then
a = a - 1
ElseIf Application.MoveAfterReturnDirection = xlToLeft Then
b = b - 1
ElseIf Application.MoveAfterReturnDirection = xlDown Then
a = a + 1
End If
If Target.Row >= a And Target.Row <= (a + 190) And Target.Column >= b And Target.Column <= (b + 3) Then
    MsgBox "Code hierhin!"
End If
End Sub


Gruß
Dominic


Bild


Betrifft: AW: Aber nur wenn keine weiteren Formel auf der .. von: Horst
Geschrieben am: 24.03.2005 10:31:15

Hallo Dominic,
schön, dass Du noch an meine Rückfrage gedacht hast.
Ich werde Deinen Vorschlag heute Nachmitteg ausprobieren. Jetzt komme ich wahrscheinlich nicht dazu (Arbeit und so ...).

Ich fürchte nur, mein Problem lässt sich auch damit nicht ganz lösen, da die Änderungen nicht durch manuelle Eingabe und die Enter-Taste in die Zellen kommen, sondern über eine DDE-Schnittstelle mit einem Java-Applet vom Internet. In den Zellen selbst steht nur eine Formel d.h. ein API Code (Beispiel: =>meine User-Id<|tik!Id7?req?COMP_IND_NASDAQ).
Wenn dann der numerische Wert eingefügt wird, sehe ich den zwar, aber Target erkennt nicht die Änderung. Vielleicht gibt es aber auch eine andere Lösung bei der ich die Position der gerade geänderten Zelle zur Verfügung gestellt bekomme. Die Position ist genau das, was ich benötige.

Ich werde aber noch mal damit rumexperimentieren, vielleicht klappt's doch irgendwie. Ich gebe dann ein Feedback.

Gruß,
Horst


Bild


Betrifft: Private Sub Worksheet_Calculate() von: ransi
Geschrieben am: 23.03.2005 18:29:56



      
hallo horst

wenn es dir nur darum geht zu erfahren  ob  
in dem bereich  irgendwas  geändert wurde,
versuchs mal so:

Option Explicit
Dim Total_Focus As Range

Private Sub Worksheet_Calculate()
On Error Resume Next
If Total_Focus.Value = Range("an11:ap200").Value Then MsgBox "Zelle(n) im Bereich geändert. "
Set Total_Focus = Range("an11:ap200")
End Sub


ransi 


     Code eingefügt mit Syntaxhighlighter 3.0




Bild


Betrifft: AW: Private Sub Worksheet_Calculate() von: Horst
Geschrieben am: 23.03.2005 18:42:27

Guten Abend Ransi,
es geht mir zwar darum, zu erfahren ob irgendwas geändert wurde, aber dieses Ereignis soll dann eine andere Funktionalität auslösen. Könnte ich meinen Code dafür dann eifach an die Stelle Deines "MsgBox ... " setzen ? Dann wäre mir doch geholfen. Ich werde es einfach mal ausprobieren. Doch das dauert bei mir ein Weilchen - bin halt noch nicht so schnell im Umgang mit dieser für mich neuen Welt.

Gruß,
Horst


Bild


Betrifft: AW: Private Sub Worksheet_Calculate() von: ransi
Geschrieben am: 23.03.2005 18:47:48

hallo horst

versuch macht kluch...
probier doch einfach mal...

ransi


Bild


Betrifft: AW: Private Sub Worksheet_Calculate() von: Horst
Geschrieben am: 23.03.2005 18:54:49

... na klar, wie immer, bei so viel Hilfe.
Doch zuvor habe ich mir Dein "SyntaxHi" runtergeladen. Darf ich das installieren ? Ist das Freeware ? Mir haben Deine schönen farbigen Zeilen gefallen. Bei mir ist immer alles grau. Liegt wohl daran, dass ich VBA-Anfänger bin - hab ich gedacht.

Bis später,
Horst


Bild


Betrifft: AW: Private Sub Worksheet_Calculate() von: ransi
Geschrieben am: 23.03.2005 19:05:03

hallo horst

aus der hilfe im syntaxhighlighter :
"Info zu Syntaxhighlighter


--------------------------------------------------------------------------------

Der Syntaxhighlighter wurde vor einigen Jahren in's Leben gerufen, um das Posten von umfangreichen Programm-Quelltexten in Foren attraktiver zu gestalten. Das Tool ermöglicht es, die Quelltexte, gemäß dem gewählten Syntaxschema, einzufärben. Zudem lassen sich Textpassagen in verschiedenen Schriftstilen (Fett, Kursiv, Unterstrichen) darstellen. Die so bearbeiteten Texte werden dann in's HTML-Format übertragen und können weiter verwendet werden.

Das Programm wird in unregelmäßigen Abständen weiter entwickelt und verbessert. Mit der aktuellen Version 3.0 wurde eine ganze Reihe von Verbesserungen eingeführt. So gibt es jetzt z.B. keine zusätzliche DLL mehr, und die Parser-Engine wurde direkt in die ausführbare Datei einkompiliert. Darüber hinaus wurden einige sehr nützliche Funktionen implementiert, die mit der ursprünglichen Aufgabe des Programms nur noch wenig zu tun haben. Und da der Funktionsumfang zugenommen hat, gibt es nun auch erstmalig eine Hilfedatei ;-)

Bis Version 1.5 (bzw. 1.6) wurde das Projekt parallel als ausführbare Datei (exe) und als COM-AddIn (für VB6, VBA, VS6) erstellt. Die Entwicklung des COM-AddIns wurde jedoch eingestellt, da sich praktisch niemand dafür interessiert hat.

Das Programm ist Freeware. Für alle meine Freeware-Programme gilt, daß deren Benutzung kostenfrei ist. Sie können diese Programme an Freunde, Kollegen und Bekannte weitergeben, solange die Software nicht verändert wird. Wenn Sie planen, diese Programme zur öffentlichen Nutzbarmachung auf einen Server (z.B. Internet) zu übertragen, oder auf einem Datenträger (z.B. CD) weiterzugeben, so bedarf dies der vorherigen Zustimmung des Autors.

Beachten Sie bitte, daß die Anwendung des Programms auf eigene Gefahr erfolgt, und jede Art von Haftung ist ausgeschlossen.

Zudem haben Sie für dieses Programm keinerlei Anspruch auf Support.


Der Syntaxhighlighter ist ein Produkt von Risi Thomas Softwaredevelopment



--------------------------------------------------------------------------------

Copyright © 2004 Thomas Risi"

ransi


Bild


Betrifft: AW: Private Sub Worksheet_Calculate() von: Horst
Geschrieben am: 23.03.2005 22:33:02

Hallo Ransi,
nach langem Probieren bin ich jetzt zu der Erkenntnis gekommen, dass Dein Konstrukt zwar funktioniert was den zu überwachenden Bereich betrifft, aber ich hatte vorher mit der Anweisung
"Private Sub Worksheet_Change(ByVal Target As Range)"
in "Target" die genaue Position der Veränderung. Das geht offensichtich mit "Worksheet_Calculate()" nicht mehr.

Meine Frage ist nun: Gibt es einen anderen Weg als über "Target" an die genaue Position der Veränderung zu kommen ? Solltest Du eine Idee haben, so lass sie mich bitte wissen.

Gruß,
Horst


 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA: Ereignis bei Änderung eines Zelleninhaltes."