Registriert seit: 22.06.2016
Version(en): 2007
Hallo liebe Gemeinde;
folgendes Problem habe mir ein Makro gebaut,
es wird automatisch nach der Größe sortiere, wenn eine bestimmte Zelle verändert wird.
Funktioniert super, wenn ich die Zelle per Hand ändere, wenn ich einen verweis auf eine andere Zelle lege, also die Zelle M1 sich die Daten holt, funktioniert es nicht!
Hat wer eine Idee?
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Intersect(Target, Range("$M$1")) Is Nothing Then Exit Sub ActiveWorkbook.Worksheets("Nebenrechnungen").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Nebenrechnungen").AutoFilter.Sort.SortFields.Add _ Key:=Range("K3"), SortOn:=xlSortOnValues, Order:=xlDescending, _ DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Nebenrechnungen").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi, (18.07.2016, 13:47)KS20 schrieb: Funktioniert super, wenn ich die Zelle per Hand ändere, wenn ich einen verweis auf eine andere Zelle lege, also die Zelle M1 sich die Daten holt, funktioniert es nicht! das geht meines Wissens nicht, da eine Änderung per Formel nicht als Change-Event erkannt wird.
Registriert seit: 22.06.2016
Version(en): 2007
Gibt es denn da eine andere Lösung?
bzw. weiß wer eine?
Danke
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Moin! Dann musst Du halt die Zelle(n) überwachen, die das Formelergebnis in M1 verändern.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
Hallo, Zitat:Gibt es denn da eine andere Lösung?
bzw. weiß wer eine? (ungetestet)Ich schlage vor, daß Du Dir eine Zelle einrichtest, in die Du den Formelwert aus, ich glaube M1 war es, übertragen läßt. Dann sollte das mit dem Auslesen der Wertänderung klappen.
Registriert seit: 22.06.2016
Version(en): 2007
18.07.2016, 16:01
(Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2016, 13:19 von Rabe.
Bearbeitungsgrund: Code mit Code-Tags
)
Hallo, hat alles nicht funktioniert, dann Plan B  so sieht nun mein Makro aus: Code: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub [color=#333333] If Intersect(Target, Range("$M$1")) Is Nothing Then Exit Sub[/color] ActiveWorkbook.Worksheets("Nebenrechnungen").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Nebenrechnungen").AutoFilter.Sort.SortFields.Add _ Key:=Range("K3"), SortOn:=xlSortOnValues, Order:=xlDescending, _ DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Nebenrechnungen").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
Die Sortierung wird im Tabellenblatt "Nebenrechnungen" gestartet Was muss ich ändern, dass er startet, wenn ich im Tabellenblatt "TEST" im Bereich A9:A30 was ändere? Dann müsste ich doch die Zeile: If Intersect(Target, Range("$M$1")) Is Nothing Then Exit Subanpassen? Aber da hänge ich nun fest!Danke
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
ich hoffe, das Makro hast Du schon im Modul des Tabellenblattes Test. Dann brauchst Du nur statt "M1" "A9:A30" einzusetzen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Noch eine Ergänzung: Arbeite niemals mit ActiveWorbook, wenn es sich verhindern lässt. Hier also ThisWorkbook
(in diesem speziellen Fall ist es unerheblich, es dient mir auch nur der Sensibilisierung zur Verhinderung von unexpected errors)
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 14.04.2014
Version(en): Office 2013/2016/2019/365
Hi,
If Target.Cells.Count > 1 Then Exit Sub
mache eine Kopie der Mappe -> markiere mal das ganze Blatt und drücke die Entf. Taste;)
lg Chris Feedback nicht vergessen. 3a2920576572206973742064656e20646120736f206e65756769657269672e
Registriert seit: 22.06.2016
Version(en): 2007
19.07.2016, 12:54
(Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2016, 13:18 von Rabe.
Bearbeitungsgrund: Code ohne Schriftformatierung, dafür mit Code-Tags!
)
Hi, danke für die vielen Tipps, jetzt noch ein kleines Problem^^ Wie bekomme ich Makros zusammen nun aktiv in das Tabellenblatt, wenn da schon ein Makro steht? Code: Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range On Error Resume Next Set rng = Range("ad9:as999") If Not Intersect(rng, Target) Is Nothing Then Application.EnableEvents = False Target(1, 1).Value = WorksheetFunction.VLookup(Target(1, 1).Value, Tabelle3.Range("a2:b33"), 2, 0) End If errmsg: On Error GoTo 0 Application.EnableEvents = True If Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub If Target.Value <> "" Then Target.Offset(0, 1).Value = Date Else Target.Offset(0, 1).ClearContents End If End Sub
Das habe ich dort schon und das soll mit rein: Code: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Intersect(Target, Range("$M$1")) Is Nothing Then Exit Sub ActiveWorkbook.Worksheets("Nebenrechnungen").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Nebenrechnungen").AutoFilter.Sort.SortFields.Add _ Key:=Range("K3"), SortOn:=xlSortOnValues, Order:=xlDescending, _ DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Nebenrechnungen").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With MsgBox "Makro gestartet!" End Sub
Danke
|