Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
904to908
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
904to908
904to908
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Private Sub Worksheet_Change 2x

Private Sub Worksheet_Change 2x
11.09.2007 16:56:00
lisa
Hallo Exceljaner
Ich habe in einer tabelle zwei mal den Code
Private Sub Worksheet_Change(ByVal Target As Range)
Irgendwie kommen diese sich ins Gehege.
Fehker beim Kompilieren
Mehrdeutiger Name: Worksheet_Change
Ich kann auf keinen verzichten, wie bekomme ich das zum laufen
Gruß Lisa

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Private Sub Worksheet_Change 2x
11.09.2007 16:57:42
Hajo_Zi
Hallo Lisa,
mache beide Code in einem Change Ereignis.

AW: Private Sub Worksheet_Change 2x
11.09.2007 18:39:00
lisa
Hallo Hajo
Ich habe das versucht, indem ich vom einen Code das "Private Sub Worksheet_Change(ByVal Target As Range)" weggelassen habe und den Rest zum anderen Ereignis kopiert habe.
Nur das Problem hierbei ist das dann gar nichts mehr läuft.
Was mache ich da falsch?

AW: Private Sub Worksheet_Change 2x
11.09.2007 19:25:00
Hajo_Zi
Hallo Lisa,
ich lehne es ab über da Internet auf fremde Rechner zu schauen, aus diesem Grunde kann ich Dir keinen Tip geben.
Gruß Hajo

Anzeige
AW: Was soll das heißen?
11.09.2007 19:39:00
lisa
he warum willst du auf meinen Rechner schauen?
Das habe ich doch gar nicht angefragt
Was soll soetwas ?
Wenn du hier auch nicht weiter weißt dann sage es offen und gib die Frage an andere ab.
Lisa

AW: Was soll das heißen?
11.09.2007 19:41:00
Lars
Hi,
Hajo hat vermutlich wieder zuviel geschnüffelt.
warum lädst du die Problemmappe nicht einfach hoch?
mfg Lars

AW: Was soll das heißen?
11.09.2007 20:11:52
Hajo_Zi
Hallo Lars,
jeder hat so sein Hobby.
Gruß Hajo

AW: Was soll das heißen?
11.09.2007 19:51:04
Hajo_Zi
Hallo Lisa,
siehst Du meine Code den ich gerade geschrieben habe. Ich vermute Nein, dazu muss ich ihn in Forums kopieren.
Gruß Hajo

Anzeige
AW: Was soll das heißen?
11.09.2007 19:57:00
lisa
Also
Lars, ich komme auf dein Angebot zurück.
Hajo, ich versteh nur Bahnhof
Ich mache eine Mappe fertig
Gruß Lisa

AW: Was soll das heißen?
12.09.2007 10:31:01
lisa
Hallo zusammen
Ich habe hier mal eine Mappe hochgeladen
Wenn noch mal jemand Zeit hat?
Falls es sich nicht selbst erklärt bitte kurz melden
https://www.herber.de/bbs/user/45931.xls
Liebe Grüße Lisa

AW: Was soll das heißen?
12.09.2007 13:11:40
Wolli
Hallo Lisa, ich habe die zweite Change-Prozedur umbenannt, so dass sich die beiden nicht ins Gehege kommen. Am Ende der ersten wird einfach die zweite aufgerufen und separat davon ausgeführt. Das ist jetzt mit der heißen Nadel gestrickt und nicht die feine englische Art. Bitte gründlich testen! Gruß, Wolli

'Diese codes laufen nicht zusammen wenn ich diesen auch freigebe
Private Sub Worksheet_Change(ByVal Target As Range)
Dim intbereich, intergebnis, intgef As Integer
Dim loletzte As Long
If Target.Address  "$A$1" Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Range("e1:f1").ClearContents
intgef = 1
loletzte = IIf(IsEmpty(ActiveSheet.Range("d65536")), _
ActiveSheet.Range("d65536").End(xlUp).Row + 1, 65536)
If Target = "" Then Exit Sub
For intbereich = 4 To loletzte
If InStr(1, ActiveSheet.Cells(intbereich, 4), Target, vbTextCompare) Then
ActiveSheet.Cells(intgef, 5) = ActiveSheet.Cells(intbereich, 4)
intergebnis = intbereich
ActiveSheet.Rows(intbereich).Delete
ActiveSheet.Cells(intgef, 6) = intergebnis
intgef = intgef + 1
End If
Next intbereich
Application.EnableEvents = True
Zweites_Worksheet_Change Target
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'End Sub
Const iAnzahlSpalten = 1
Dim lRow As Long
Dim bFilterAktiv As Boolean
Cancel = True
If Target.Row > 1 Or Target.Column > iAnzahlSpalten Or _
Target.Cells.Count > 1 Then Exit Sub
bFilterAktiv = False
For lRow = 1 To iAnzahlSpalten
If Not IsEmpty(ActiveSheet.Cells(1, lRow)) Then bFilterAktiv = True
Next lRow
If Not (bFilterAktiv) Then
MsgBox "Kein Autofilter aktiv!", vbOKOnly + vbExclamation, "Kopieren"
Exit Sub
End If
Application.EnableEvents = False
lRow = Sheets("Tabelle2").Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row + 1
ActiveSheet.Range("3:" & ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row). _
Copy _
Destination:=Sheets("Tabelle2").Cells(lRow, 1)
Application.CutCopyMode = False
MsgBox "Gefilterte Daten wurden nach Tabelle2 kopiert!", vbOKOnly + vbInformation, " _
Kopieren"
Application.EnableEvents = True
End Sub
Private Sub Zweites_Worksheet_Change(ByVal Target As Range)
Const iAnzahlSpalten = 1
Dim ix As Integer
Dim af As Filter
If Target.Row > 1 Or _
Target.Column > iAnzahlSpalten Or _
Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
If ActiveSheet.AutoFilterMode Then ActiveSheet.Range("2:2").AutoFilter
For ix = 1 To iAnzahlSpalten
If Not (ActiveSheet.Cells(1, ix) = "") Then
If WorksheetFunction.IsNumber(ActiveSheet.Cells(3, ix)) Then
ActiveSheet.Cells(2, ix).AutoFilter Field:=ix, _
Criteria1:="=" & ActiveSheet.Cells(1, ix)
Else
ActiveSheet.Cells(2, ix).AutoFilter Field:=ix, _
Criteria1:="=*" & ActiveSheet.Cells(1, ix) & "*"
End If
End If
Next ix
If Not (ActiveSheet.AutoFilterMode) Then ActiveSheet.Range("2:2").AutoFilter
Application.EnableEvents = True
End Sub


Anzeige
AW: Was soll das heißen?
12.09.2007 19:46:30
lisa
Hallo Wolli
Ich habe jetzt ein Change Ereignes als Zweites umbenannt.
Das erste läuft wie gehabt, aber die suche über c1 (zweites Change Ereignis) läuft nicht
Change Ereigniss Suche über a1 (vielen Dank an Renee) läuft wie gehabt, aber das zweite bekomme ich nicht an die Gänge!
Ich habe es noch mal beigefügt, vieleicht kann sich ja noch einmal jemand erbahmen.

Private Sub zweites_Worksheet_Change(ByVal Target As Range)
Dim intbereich, intergebnis, intgef As Integer
Dim loletzte As Long
If Target.Address  "$C$1" Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Range("e1:f1").ClearContents
intgef = 1
loletzte = IIf(IsEmpty(ActiveSheet.Range("d65536")), _
ActiveSheet.Range("d65536").End(xlUp).Row + 1, 65536)
If Target = "" Then Exit Sub
For intbereich = 4 To loletzte
If InStr(1, ActiveSheet.Cells(intbereich, 4), Target, vbTextCompare) Then
ActiveSheet.Cells(intgef, 5) = ActiveSheet.Cells(intbereich, 4)
intergebnis = intbereich
ActiveSheet.Rows(intbereich).Delete
ActiveSheet.Cells(intgef, 6) = intergebnis
intgef = intgef + 1
End If
Next intbereich
Application.EnableEvents = True
End Sub



Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Const iAnzahlSpalten = 1
Dim lRow As Long
Dim bFilterAktiv As Boolean
Cancel = True
If Target.Row > 1 Or Target.Column > iAnzahlSpalten Or _
Target.Cells.Count > 1 Then Exit Sub
bFilterAktiv = False
For lRow = 1 To iAnzahlSpalten
If Not IsEmpty(ActiveSheet.Cells(1, lRow)) Then bFilterAktiv = True
Next lRow
If Not (bFilterAktiv) Then
MsgBox "Kein Autofilter aktiv!", vbOKOnly + vbExclamation, "Kopieren"
Exit Sub
End If
Application.EnableEvents = False
lRow = Sheets("Tabelle2").Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row + 1
ActiveSheet.Range("3:" & ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row). _
Copy _
Destination:=Sheets("Tabelle2").Cells(lRow, 1)
Application.CutCopyMode = False
MsgBox "Gefilterte Daten wurden nach Tabelle2 kopiert!", vbOKOnly + vbInformation, " _
Kopieren"
Application.EnableEvents = True
End Sub



Private Sub Worksheet_Change(ByVal Target As Range)
Const iAnzahlSpalten = 1
Dim ix As Integer
Dim af As Filter
If Target.Row > 1 Or _
Target.Column > iAnzahlSpalten Or _
Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
If ActiveSheet.AutoFilterMode Then ActiveSheet.Range("2:2").AutoFilter
For ix = 1 To iAnzahlSpalten
If Not (ActiveSheet.Cells(1, ix) = "") Then
If WorksheetFunction.IsNumber(ActiveSheet.Cells(3, ix)) Then
ActiveSheet.Cells(2, ix).AutoFilter Field:=ix, _
Criteria1:="=" & ActiveSheet.Cells(1, ix)
Else
ActiveSheet.Cells(2, ix).AutoFilter Field:=ix, _
Criteria1:="=*" & ActiveSheet.Cells(1, ix) & "*"
End If
End If
Next ix
If Not (ActiveSheet.AutoFilterMode) Then ActiveSheet.Range("2:2").AutoFilter
Application.EnableEvents = True
End Sub


Es ist mir wirklich schon unangenehm, aber ich schaffe es nicht allein
Liebe Grüße Lisa

Anzeige
AW: Was soll das heißen?
12.09.2007 21:39:31
Wolli
Hallo Lisa, schau noch mal auf meinen Code. In das 1. Change-Makro musst Du

Zweites_Worksheet_Change Target


einbauen, damit das zweite aufgerufen wird. Denn das zweite ist nicht mehr wirklich ein "Change"-Makro, sondern ein x-beliebiges Makro, das halt aus dem anderen heraus aufgerufen wird.
Nicht verzweifeln, viel Glück, Gruß, Wolli :-))

AW: Was soll das heißen?
13.09.2007 09:06:07
lisa
Hallo Wolli
Ich habe doch das Zweites_Worksheet_Change Targetsize="3"color="white" face="Century"> in den ersten Code eingebaut.
Aber nur Zweites_Worksheet_Change Target geht nicht, (ByVal Target As Range) muss mit in der ANweisung stehen, sonst wird gleich gemeckert.
Ich habe das erste Change auf zweites und andersrum benannt aber immer das, was Zweites heißt, läuft nicht.
Was mache ich falsch?
Gruß Lisa

Private Sub Zweites_Worksheetsize="3" _
color="white" face="Century">_Change(ByVal Target As Range)
Dim intbereich, intergebnis, intgef As Integer
Dim loletzte As Long
If Target.Address  "$C$1" Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Range("e1:f1").ClearContents
intgef = 1
loletzte = IIf(IsEmpty(ActiveSheet.Range("d65536")), _
ActiveSheet.Range("d65536").End(xlUp).Row + 1, 65536)
If Target = "" Then Exit Sub
For intbereich = 4 To loletzte
If InStr(1, ActiveSheet.Cells(intbereich, 4), Target, vbTextCompare) Then
ActiveSheet.Cells(intgef, 5) = ActiveSheet.Cells(intbereich, 4)
intergebnis = intbereich
ActiveSheet.Rows(intbereich).Delete
ActiveSheet.Cells(intgef, 6) = intergebnis
intgef = intgef + 1
End If
Next intbereich
Application.EnableEvents = True
End Sub



Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Const iAnzahlSpalten = 1
Dim lRow As Long
Dim bFilterAktiv As Boolean
Cancel = True
If Target.Row > 1 Or Target.Column > iAnzahlSpalten Or _
Target.Cells.Count > 1 Then Exit Sub
bFilterAktiv = False
For lRow = 1 To iAnzahlSpalten
If Not IsEmpty(ActiveSheet.Cells(1, lRow)) Then bFilterAktiv = True
Next lRow
If Not (bFilterAktiv) Then
MsgBox "Kein Autofilter aktiv!", vbOKOnly + vbExclamation, "Kopieren"
Exit Sub
End If
Application.EnableEvents = False
lRow = Sheets("Tabelle2").Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row + 1
ActiveSheet.Range("3:" & ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row). _
Copy _
Destination:=Sheets("Tabelle2").Cells(lRow, 1)
Application.CutCopyMode = False
MsgBox "Gefilterte Daten wurden nach Tabelle2 kopiert!", vbOKOnly + vbInformation, " _
Kopieren"
Application.EnableEvents = True
End Sub



Private Sub Worksheet_Change(ByVal Target As Range)
Const iAnzahlSpalten = 1
Dim ix As Integer
Dim af As Filter
If Target.Row > 1 Or _
Target.Column > iAnzahlSpalten Or _
Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
If ActiveSheet.AutoFilterMode Then ActiveSheet.Range("2:2").AutoFilter
For ix = 1 To iAnzahlSpalten
If Not (ActiveSheet.Cells(1, ix) = "") Then
If WorksheetFunction.IsNumber(ActiveSheet.Cells(3, ix)) Then
ActiveSheet.Cells(2, ix).AutoFilter Field:=ix, _
Criteria1:="=" & ActiveSheet.Cells(1, ix)
Else
ActiveSheet.Cells(2, ix).AutoFilter Field:=ix, _
Criteria1:="=*" & ActiveSheet.Cells(1, ix) & "*"
End If
End If
Next ix
If Not (ActiveSheet.AutoFilterMode) Then ActiveSheet.Range("2:2").AutoFilter
Application.EnableEvents = True
End Sub


Anzeige
AW: Was soll das heißen?
13.09.2007 16:12:57
Wolli
Hallo Lisa, es läuft nicht, weil es nicht aufgerufen wird. Das Makro "Private Sub Worksheet_Change(ByVal Target As Range)" läuft, weil es automatisch "anspringt", sobald sich im Blatt etwas ändert. Nur ein Makro kann das tun. Deshalb springt das Makro "Private Sub Zweites_Worksheet_Change(ByVal Target As Range)" nicht automatisch an, sondern muss innerhalb des erstgenannten aufgerufen werden. Der Aufruf lautet

Zweites_Worksheet_Change Target


und ist am Ende des erstgenannten einzufügen.
Gruß, Wolli

AW: Was soll das heißen?
14.09.2007 09:08:13
lisa
Hallo Wolli
Ich habe es so verstanden wie unten aufgeführt.
Die Fehlermeldung ist weg, dass erste Macro läuft, dass zweite aber trotz alledem noch immer nicht.
Die suche über d1 mit LÖschung des gefundenen Datensatzes funktioniert nicht.
Danke das du dich doch noch gemeldet hast.
Ich hatte es schon nicht mehr geglaubt.

Liebe Grüße Lisa

Private Sub Worksheet_Change(ByVal Target As Range)
Const iAnzahlSpalten = 1
Dim ix As Integer
Dim af As Filter
If Target.Row > 1 Or _
Target.Column > iAnzahlSpalten Or _
Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
If ActiveSheet.AutoFilterMode Then ActiveSheet.Range("2:2").AutoFilter
For ix = 1 To iAnzahlSpalten
If Not (ActiveSheet.Cells(1, ix) = "") Then
If WorksheetFunction.IsNumber(ActiveSheet.Cells(3, ix)) Then
ActiveSheet.Cells(2, ix).AutoFilter Field:=ix, _
Criteria1:="=" & ActiveSheet.Cells(1, ix)
Else
ActiveSheet.Cells(2, ix).AutoFilter Field:=ix, _
Criteria1:="=*" & ActiveSheet.Cells(1, ix) & "*"
End If
End If
Next ix
If Not (ActiveSheet.AutoFilterMode) Then ActiveSheet.Range("2:2").AutoFilter
Application.EnableEvents = True
zweites_Worksheet_Change Target
End Sub



Private Sub zweites_Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$1" And Target  "" Then
On Error GoTo FEHLER
Application.EnableEvents = False
Dim intbereich, intgef As Integer
Dim loletzte As Long
Range("e1:f1").ClearContents
intgef = 1
loletzte = IIf(IsEmpty(Range("d65536")), Range("d65536").End(xlUp).Row + 1, 65536)
For intbereich = 4 To loletzte
If InStr(1, Cells(intbereich, 4), Target, vbTextCompare) Then
Cells(intgef, 5) = Cells(intbereich, 4)
Rows(intbereich).Delete
Cells(intgef, 6) = intbereich
intgef = intgef + 1
End If
Next intbereich
End If
FEHLER:
Application.EnableEvents = True
End Sub


Anzeige
AW: Danke es klappt! Danke für die Geduld!
14.09.2007 09:12:00
lisa

AW: Danke es klappt! Danke für die Geduld!
14.09.2007 09:23:00
lisa
Ich habe doch noch ein neues Problem.
In der Spalte D:D wird über D1 gesucht.
Ich gebe in D1 den zu suchenden Datensatz ein und er wird gefunden in e1 und f1 angezeigt und aus der Spalte D gelöscht. Das klappt jetzt sehr gut.
Es werden aber nur Daten in Spalte d:d erkannt die direkt im Tabellenblatt eingegeben wurden.
Lasse ich automatisch aus der Tabelle 2 in die Spalte D:D eintragen werden die Daten nicht erkannt. Woran liegt das?
Gruß Lisa

Private Sub zweites_Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$1" And Target  "" Then
On Error GoTo FEHLER
Application.EnableEvents = False
Dim intbereich, intgef As Integer
Dim loletzte As Long
Range("e1:f1").ClearContents
intgef = 1
loletzte = IIf(IsEmpty(Range("d65536")), Range("d65536").End(xlUp).Row + 1, 65536)
For intbereich = 4 To loletzte
If InStr(1, Cells(intbereich, 4), Target, vbTextCompare) Then
Cells(intgef, 5) = Cells(intbereich, 4)
Rows(intbereich).Delete
Cells(intgef, 6) = intbereich
intgef = intgef + 1
End If
Next intbereich
End If
FEHLER:
Application.EnableEvents = True
End Sub


Anzeige
AW: Danke es klappt! Danke für die Geduld!
14.09.2007 09:57:31
Wolli
Moin Lisa, Du meinst, wenn Du in D1 eine Formel eingibst (z.B. =Tabelle2!A17)? Wenn Du dann in Tabelle2 was änderst, ändert sich zwar der angezeigte Wert in D1, aber nicht der eigentliche Inhalt von D1. Deshalb wird das Makro in dem Fall nicht ausgelöst. Anders sieht es aus, wenn Du per Makro die Zelle änderst (z.B. Range("D1") = 12345) - dann wird das Makro ausgelöst. Außer natürlich, es ist noch application.enableevents = false gesetzt. Dann passiert gar nix.
Gruß, Wolli

AW: Danke es klappt! Danke für die Geduld!
14.09.2007 10:24:13
lisa
Hallo Wolli
nicht ganz,
ich kopiere per Macro Daten aus Tabelle 2 d2
und füge sie dann in tabelle1 in Celle d1 ein.
Jetzt sollte eigentlich schon das Macro laufen und den Datensatz finden und löschen.
Die Spalte D:D wird widerum aus einer Externen Mappe gefüllt.
Hört sich ein wenig Verquer an, aber es ist eine Datenbank die befüllt und wieder gelöscht wird.
Application.EnableEvents = True ist eingestellt (s. Code)
Gruß Lisa

Anzeige
Weiß nicht weiter
14.09.2007 14:18:58
Wolli
Liebe Lisa, ich weiß nun auch nicht mehr weiter. Das Hauptproblem ist doch, dass Du versuchst, eine Lösung zu basteln und nicht wirklich weißt, wie Du mit dem Baukasten umgehen sollst. Und selbst, wenn Du durch die Hilfe des Forums eine funktionierende Lösung hinbekommst, lauert mit Sicherheit schon die nächste Schwierigkeit hinter der nächsten Ecke.
Und wichtiger noch: Wenn Deine Makros wie wild betriebliche Daten von A nach B schieben und dabei Fehler entstehen, kannst Du echte Probleme bekommen. Sag Deinem Chef, dass Du keine Programmiererin bist und dass Du keine automatische Lösung machen kannst. Lieber ein bisschen mehr Aufwand jeden Tag, dafür auf Nummer sicher.
Sei nicht bös, viel Glück trotzdem, Wolli

Anzeige
AW: Weiß nicht weiter
14.09.2007 16:37:00
lisa
Hallo Wolli
Danke für deine Ehrlichkeit und Mühe
Ich bin mein eigener Herr und überwache für eine Firma Buchungsabläufe.
Ich hätte es gebraucht um mir die Arbeit zu erleichtern.Vieleicht bin ich wirklich zu Umständlich an das Projekt gegangen.
Ich werde versuchen einen anderen Wg zu gehen.
Bis dahin weiter Fleißarbeit.
Schade
Trotzdem Danke für deine Geduld
Aber mal nebenbei, was hat denn Hajo gehabt? Habe ich etwas falsch verstanden?
Liebe Grüße Lisa

AW: Weiß nicht weiter
15.09.2007 12:22:00
Wolli
Hallo Lisa, ich hab's nicht genau verfolgt, aber ich denke, Hajo hat was für Dich gebastelt und es dann nicht in Deinem Code wiedergefunden, so dass er annehmen musste, Du hättest es nicht genutzt. Außerdem hat der Excel-Experte an sich am liebsten konkrete, knackige Fragen, gibt eine Antwort, hört ein "Danke" und das war's. War halt etwas länglich in Deinem Falle.
Don't worry, be happy! Und wenn Du's tatsächlich beruflich brauchst, könnte es sich evtl. lohnen, das ganze machen zu lassen - von Herrn Herber oder anderen Koryphäen, die Dein Problem mit Telefon, E-Mail und zwei Stundensätzen sicherlich in den Griff bekommen. Steuerlich absetzbar :-)
Ich wünsch' Dir was und ein schönes Wochenende, Lieben Gruß, Wolli

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige