Worksheet_Change

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

Betrifft: Worksheet_Change
von: Woldeh
Geschrieben am: 22.04.2015 15:36:54

Hallo,
wie kann ich das Ereignis "Worksheet_Change" mittels Makro auslösen?
Der Code steht in meinem Arbeitsblatt "PLANUNG", aber mir ist die Syntax nicht klar:
Call sheets("Planung")_change ($A$5) ??
Vielen Dank für eure Hilfe!
Woldeh

Bild

Betrifft: AW: Worksheet_Change
von: selli
Geschrieben am: 22.04.2015 15:42:14
hallo woldeh,
was willst du damit bezwecken?
($A$5)
was steht denn im change-ereignis?
was willst du erreichen?
gruß
selli

Bild

Betrifft: AW: Worksheet_Change
von: Nepumuk
Geschrieben am: 22.04.2015 15:43:47
Hallo,
Du musst aus der Private Sub Worksheet_Change eine Public Sub machen und dann geht es so:

Call Worksheets("Planung").Worksheet_Change(Range("A5"))

Gruß
Nepumuk

Bild

Betrifft: Geht das tatsächlich in irgendeiner XlVersion, ...
von: Luc:-?
Geschrieben am: 22.04.2015 20:14:47
Nepumuk?
Bei mir fktioniert das erwartungsgemäß weder unter Xl14/2010 noch unter Xl12/2007! Das geht in diesen Versionen nur mit dem CodeName des Blattes.

Du musst aber auch gar nichts an der EreignisProzedur ändern, Woldeh,
sondern musst nur eine Public-Rufprozedur zusätzlich ins KlassenModul der EreignisProz setzen:

Public Sub RufWshChange(Ziel As Range): Call Worksheet_Change(Ziel): End Sub
In ein normales Modul käme dann der Aufruf von RufWshChange mit ParameterÜbergabe für Ziel, hier Range("A5").
Allerdings hast du dann das gleiche Problem mit dem CodeName. Es geht nur damit oder du verwendest CallByName, wobei du dann entscheiden kannst, ob die RufProz oder gleich die auf Public gesetzte EreignisProz aufgerufen wdn soll. Hier mal die entsprd Zeile mit der RufProz:
CallByName Worksheets("Planung"), "RufWshChange", vbMethod, Range("A5")

Gruß, Luc :-?

Besser informiert mit …

Bild

Betrifft: AW: Geht das tatsächlich in irgendeiner XlVersion, ...
von: Uduuh
Geschrieben am: 22.04.2015 20:39:20
Hallo Luc,
geht sowohl in 2003 als auch in 2013
Gruß aus’m Pott
Udo


Bild

Betrifft: Zu 2003 kann ich nicht's sagen, ...
von: Luc:-?
Geschrieben am: 22.04.2015 22:43:16
…Udo,
hab' ich nicht mehr, und in den beiden nächsten geht's nicht, warum auch immer…
Gruß, Luc :-?

Bild

Betrifft: geht auch in 2007
von: Rudi Maintaire
Geschrieben am: 23.04.2015 10:12:11
Hallo,
nur, wie schon gesagt, darf die Ereignisprozedur nicht Private sein.

Sub aaa()
  Worksheets(1).Worksheet_Change Range("A1")
  'oder
  Call Worksheets(1).Worksheet_Change(Range("b1"))
End Sub
Sub Worksheet_Change(ByVal Target As Range)
  MsgBox Target.Address
End Sub
Gruß
Rudi

Bild

Betrifft: Bei mir nicht, viell habt ihr eine aktuellere ...
von: Luc:-?
Geschrieben am: 23.04.2015 17:30:39
…xlVBA-Version drauf, Rudi… :-[
Vertippt habe ich mich jedenfalls nicht. Xl14 sollte bei mir auch aktuell sein, aber evtl habe ich mich mit dem Intellisense zufrieden gegeben, nachdem der auch zu einem extra angelegten Wsh-Objekt das nicht zeigen wollte…
Gruß, Luc :-?

Bild

Betrifft: Das geht tatsächlich in xl2013
von: Nepumuk
Geschrieben am: 22.04.2015 20:45:26
Hallo Luc,
ich kann das natürlich nur unter xl2013 testen aus einem Standardmodul kann ich die öffentliche Methode so aufrufen. Auch aus einer anderen Klasse heraus funktioniert es problemlos.

' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Public Sub Worksheet_Change(ByVal Target As Range)
    MsgBox Target.Address
End Sub

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

Option Explicit

Public Sub Test()
    Call Worksheets("Tabelle1").Worksheet_Change(Range("A5"))
End Sub

Gruß
Nepumuk

Bild

Betrifft: Unter Xl12/Xl14 streikt schon die VBE-Syntax-...
von: Luc:-?
Geschrieben am: 22.04.2015 22:41:00
…Überprüfung, Nepumuk,
keine zulässige Methode o.s.ä. Allerdings fktioniert's mit CallByName, was ja auch kein anderes Objekt verwendet. Folglich wird's wohl an der VBA- bzw VBE-Version liegen. Muss man dann halt damit leben (die unausgereiften höheren Xl-Versionen schaffe ich mir deshalb nicht an)…
Gruß, Luc :-?

Bild

Betrifft: AW: und in 2010 gehts auch, ...
von: Daniel
Geschrieben am: 22.04.2015 21:20:14
Sollte es irgendwo nicht funktionieren, dann kann man auch einfach
den benötigten Code in ein allgemeines Modul schreiben, mit dem Zellbereich als Übergabeparamter.
Dann kann man ihn von jeder Stelle aus aufrufen, sei es vom Change-Eventmakro aus mit der Übergabe von Target oder mit Application.Run von einer anderen Datei aus.
Gruß Daniel

Bild

Betrifft: 2010 hatte ich getestet => Syntax-Fehler! orT
von: Luc:-?
Geschrieben am: 22.04.2015 22:45:27
Gruß, Luc :-?

Bild

Betrifft: orT ???
von: Daniel
Geschrieben am: 22.04.2015 23:46:47
oT für "ohne Text" oder owT für "ohne weiteren Text" sind mir als Abkürzung bekannt.
Aber für was steht das orT?
Gruß Daniel

Bild

Betrifft: AW: orT !!!
von: hary
Geschrieben am: 23.04.2015 06:02:52
Moin Daniel
ohne relevanten Text. ;-)
gruss hary

Bild

Betrifft: AW: 2010 hatte ich getestet => Syntax-Fehler! orT
von: Daniel
Geschrieben am: 23.04.2015 08:17:38
Hi
bei Syntaxfehler wirst du dich vertippt haben.
Der Aufruf des Change-Events aus einem Makro im allgemeinen Modul funktioniert in 2013 und 2010 sowohl mit dem Indexnamen als auch mit dem Codenamen.
Er funktioniert sogar aus einer anderen Mappe heraus.
allerdings funktioniert die Intellisense nur bei Verwendung des Codenames, bei Verwendung des Indexnamens musst du den vollständigen Makronamen selber hinschreiben, da kannst du dann nichts abkürzen.
Gruß Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Gleiche Spalteninhalte zusammenführen"