Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
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

Formatierungsmakro erweitern

Formatierungsmakro erweitern
14.02.2023 17:40:33
Christian
Guten Abend,
meine VBA Kenntnisse beschränlen sich leider auf den Rekorder und höchstens noch löschen, was nicht benötigt wird, daher bitte ich um eure Hilfe, mein Makro weiter zu vervollständigen. Ich denke zu dem bisherigen Makro braucht es keine großen Worte, ich denke für Profis ist das selbsterklärend.
https://www.herber.de/bbs/user/157828.xlsm
Zu erst einmal eine Frage. Ich sehe es richtig, das Makro passt immer nur die Zelle an, in der sich etwas gändert hat, nicht jedes mal die ganze Tabelle? Wenn ja soll das bitte auch so bleiben, wenn nein, wäre es super wenn sich das ändert.
2. Die Texte in Spalte B haben durchs kopieren aus dem Internet oft noch ein Leerzeichen am Schluss, kann man in das Makro etwas einbauen, was dieses Leerzeichen löscht, sobald ich einen Text in Spalte B einfüge? (betrifft nur Spalte B).
3. Lässt sich noch folgendes einbauen: Wenn ich in Spalte A ganz am Ende einen Text einfüge, den es bereits in Spalte A gibt, wäre es schön, wenn das Makro diesen sofort wieder löscht und dann in die Zelle springt, in der der Text bereits steht. (Falls er noch öfter vorkommt, ist es mir egal in welche Zelle das Makro springt).
Wäre toll, wenn ihr mir helft. Danke
Christian

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formatierungsmakro erweitern
15.02.2023 11:26:00
Herbert_Grom
Hallo Christian,
wer ist "Rebecca"?
Servus
AW: Formatierungsmakro erweitern
15.02.2023 11:51:26
Christian
Fantasiename, wenn die großen techkonzerne schon Daten sammeln, dürfen sie es wenigstens unter falschem Namen tun. Ich heiße Christian
AW: Formatierungsmakro erweitern
15.02.2023 16:09:57
Christian
Hallo Herbert,
danke erstmal für deine Mühe.
Ich habe ein kleines Problem, was ich mir selbst nicht erklären kann, mehrere Dinge haben in meiner originalen Datei noch funktioniert aber in beiden hochgeladenen Dateien nicht mehr. Kannst du mal danach schauen woran das liegt?
1. Ich kann keine Zeilen mehr löschen / einfügen ohne das ein Fehler kommt.
2. ich kann keinen Text aus der Tabelle mehr kopieren und gleichzeitig in mehrere andere Zellen einfügen ohne dass ein Fehler kommt.
Nun zu deinem Makro. Ich habe versucht mehrere Sachen anzupassen, schau bitte mal ob ich alles richtig gemacht habe
Private Sub Worksheet_Change(ByVal Target As Range)
    With Selection
        .Font.Italic = True
        .Font.Bold = False
        .Font.Name = "Calibri"
        .Font.Size = 11
        .HorizontalAlignment = xlCenter
    End With
    
    Cells.EntireColumn.AutoFit
    
    If Right(Selection, 1) = " " Then Target.Value = Left(Target.Value, Len(Target.Value) - 1)
    
    lLastrow = Cells(Rows.Count, "B").End(xlUp).Row - 1
    
    If Application.WorksheetFunction.CountIf(Worksheets("Tabelle1").Range("A2:A" & lLastrow), Target.Value) > 0 And Target.Value > Range("A" & lLastrow - 1).Value Then
         lRowFind = Application.Match(Target.Value, Range("A2:A" & lLastrow), 0) + 1
         Cells(lLastrow + 1, 1).ClearContents
         Cells(lRowFind, 1).Select
    End If
End Sub
Das erste was ich machen wollte ist dass nicht Spalte B auf mehrfache Einträge geprüft wird, sondern Spalte A.
Das zweite war dass bei gefundenen Mehrfacheinträgen der soeben eingegebene Text gelöscht werden sollte, daher habe ich die Zeile
Cells(lLastrow + 1, 1).ClearContents
eingefügt.
Das dritte (ich weiß das wurde bislang noch nicht angesprochen), ich dupliziere öfters die Daten zu den Filmen, eben wenn ich Einträge für mehrere Schauspieler machen will, daher habe ich die Prüfung And Target.Value > Range("A" & lLastrow - 1).Value eingefügt, damit dies auch in Spalte A möglich ist, das ich den letzten Eintrag nehme und diesen in weitere Zeilen kopieren kann.
Schaust du bitte mal?
Danke
Christian
Anzeige
AW: Formatierungsmakro erweitern
15.02.2023 18:16:21
Herbert_Grom
Probiers mal damit:
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim lRowFind&, lLastRow&
   
   If Target.Count > 1 Then GoTo ende
   
   With Selection
      .Font.Italic = True
      .Font.Bold = False
      .Font.Name = "Calibri"
      .Font.Size = 11
      .HorizontalAlignment = xlCenter
   End With
   
   Cells.EntireColumn.AutoFit
   
   '* letzte belegte Zeile ermitteln
      lLastRow = Cells(Rows.Count, "A").End(xlUp).Row - 1
   
   '* wenn Zeile gelöscht oder Text kopiert werden soll, dann hier Abbruch
      If Target.Row > lLastRow + 1 Then GoTo ende
      
   '* rechtes Leerzeichen (Blank) entfernen
      If Right(Selection, 1) = " " Then Target.Value = Left(Target.Value, Len(Target.Value) - 1)
      
   Application.EnableEvents = False
      '* erste Zelle mit dem Suchbegriff anspringen
         If Application.WorksheetFunction.CountIf(Worksheets("Tabelle1").Range("A2:A" & lLastRow), Target.Value) > 0 Then
            lRowFind = Application.Match(Target.Value, Range("A2:A" & lLastRow), 0) + 1
            Rows(Target.Row).EntireRow.Delete
            Cells(lRowFind, "A").Select
         End If
ende:
   Application.EnableEvents = True
End Sub

Anzeige
AW: Formatierungsmakro erweitern
15.02.2023 18:22:25
Christian
hallo Herbert,
eine Logikfrage habe ich, zu If Target.Row > lLastRow + 1 Then GoTo ende
prüfst du damit nicht, ob der neu eingegebene und der letzte vorhandene Text ungleich ist und wäre nicht das die Bedingung um weiterzumachen?
Gruß
Christian
AW: Formatierungsmakro erweitern
15.02.2023 18:28:07
Herbert_Grom
Damit prüft er, ob die aktive Zeile die ist, in die du einen neuen Text unten angefügt hast. Falls nein, geht er davon aus, dass du innerhalb der Tabelle etwas ändern möchtest und bricht das Makro ab, um die angesprochenen Fehlermeldungen zu verhindern.
AW: Formatierungsmakro erweitern
15.02.2023 18:30:57
Christian
so ist es plausibel, danke für die Erklärung
Testergebnis
15.02.2023 18:28:39
Christian
Hallo herbert,
wenn ich den letzten Text in Spalte A eine nur Zelle untendrunter einfüge, wird der immer noch gelöscht, es bleibt nur erhalten wenn ich ihn in mehr als eine Zelle unterhalb einfüge.
Gruß
Christian
Anzeige
nur eine Zelle meinte ich owT
15.02.2023 18:29:43
Christian
.
AW: Testergebnis
15.02.2023 18:32:37
Herbert_Grom
Du hast doch eine "intelligente" Tabelle. Die erweitert sich ja automatisch, wenn du unten einen neuen Text einfügst. Außer, der einzufügende Text ist in der Tabelle schon vorhanden.
AW: Testergebnis
15.02.2023 18:36:49
Christian
das Problem ist ja folgendes, ich will ja dass der Vergleich, ob ein Text schon vorhanden ist nur dann stattfindet, wenn der am Ende der Spalte A eingegebene Text ungleich dem obendrüber ist, damit ich eben den letzten Text kopieren kann, ohne dass er gelöscht wird.
AW: Testergebnis
15.02.2023 18:42:29
Herbert_Grom
Du sprichst in Rätseln, jedenfalls für mich, denn wenn du den letzten Text kopierst und eine Zeile darunter wieder einfügst, dann kann das doch nicht funktionieren, denn dann wäre er ja doppelt und wenn er schon vorhanden ist, dann soll er ja nicht eingefügt und die Zeile wieder gelöscht werden!!! So war jedenfalls deine bisherige Aussage, so wie ich sie verstanden habe. Also, wie soll es jetzt sein?
Anzeige
AW: Testergebnis
15.02.2023 18:59:28
Christian
wie ich gesagt habe, die Prüfung ob ein Text schon vorhanden ist soll nur stattfinden, wenn der unterste zuvor vorhandene Text ungleich dem soeben eingegebenen Text ist.
Vielleicht wird es verständlicher, wenn du dir folgendes vor Augen führst.
Wenn ich einen neuen Film der Tabelle hinzufügen möchte, fange ich in Spalte A an. Der neue Film ist immer ungleich dem letzten in der Tabelle vorhandenen Film, daher die Prüfung ob der Film bereits in der Tabelle existiert und die Löschung, da ich den Film ja nicht zweimal brauche.
Wenn er jetzt nicht vorhanden ist, also der Text nicht gelöscht wird, kopiere ich die weiteren Daten aus dem Internet in die Tabelle und lege für diesen Film eine Zeile für jeden Schauspieler an, kopiere also die Daten zu dem Film in jede weitere Spalte die ich brauche. In diesem Moment ist es natürlich blöd, wenn diese Zeilen wieder gelöscht würden.
Im ersten Fall kann man halt sicher sagen, dass die letzten beiden Texte ungleich sind, da der letzte Film der Tabelle und der neu hinzugefügte verschiedene Filme sind und im zweiten Fall sind die Texte gleich, da ich ja die Daten des Filmes, den ich gerade bearbeite, kopiert habe.
Hoffe jetzt ist es verständlicher.
Anzeige
in jede weitere Zeile, nicht spalte owT
15.02.2023 19:00:55
Christian
,
aber mir fällt gerade auf,
15.02.2023 19:09:46
Christian
ich kann dieses Problem auch lösen ohne das Makro zu ändern, indem ich erst tt-Code, Titel und Datum eingebe und dann alle 3 gleichzeitig in eine weitere Zeile kopiere, dann wird nichts gelöscht, gelöscht wird nur, wenn ich ausschließlich den tt-Code in eine weitere Zeile kopiere.
Wäre zwar auch auf dem Weg möglich, aber wäre natürlich trotzdem schöner wenn das andere auch ginge.
habs hinbekommen
15.02.2023 20:20:10
Christian
mein erster Versuch war
If Target.Row > lLastRow + 1 Or Target.Value = Range("A" & lLastRow - 1).Value Then GoTo ende aber das hat zum Laufzeitfehler 438 geführt.
Mein zweiter dann war das was ich schonmal hatte
If Application.WorksheetFunction.CountIf(Worksheets("Tabelle1").Range("A2:A" & lLastRow), Target.Value) > 0 And Target.Value > Range("A" & lLastRow - 1).Value Then
das hat dann funktioniert. Ist zwar so wie es aussieht nicht in deinem Sinne, du hättest das glaube ich lieber in den vorherigen Abbruchteil gepackt, aber es funktioniert.
Danke
Christian
Anzeige
AW: habs hinbekommen
16.02.2023 09:09:59
Herbert_Grom
Na dann ist es ja gut.
Servus
Vielen Dank für deine Hilfe owT
16.02.2023 16:05:41
Christian
.
AW: geschlossen von Piet
17.02.2023 03:30:22
Piet
warum noch offen wenn alles klappt?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige