Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

CheckBox-"Undo" beim deaktivieren!? [Anfänger fragt]





Frage

Hallo! Ich kopiere mit Hilfe von CheckBoxen aus einer Tabelle bestimmte Zeilen in eine zweite Tabelle, wo sie dann in einem Diagramm dargestellt werden. Das funktioniert auch! Nun meine Frage: Ist es möglich, beim deaktivieren der CheckBox die kopierte Zeile aus der zweiten Tabelle wieder zu löschen (ein undo quasi) und die verbliebenen Zeilen eins "aufzurücken" (Leerzeilen löschen)? Hier der CheckBox-code und ein code zum löschen der Leerzeilen (beide bei [i] coros [/i] gefunden - DANKE). Der zweite sollte wenn möglich mit dem "undo" der CheckBox verknüpft sein (Beim deaktivieren des Kontrollkästchen die zuvor kopierte Zeile wieder löschen und leerzeile löschen) Vorab schonmal VIELEN DANK für die Hilfe, nerwoest ------------------------------------ CheckBox zum kopieren einer Zeile in eine zweite Tabelle: [i] Private Sub CheckBox1_Click() Application.ScreenUpdating = False If CheckBox1.Value = True Then Range("3:3").Copy ´Zeile kopieren erste_leere_Zeile = Worksheets("Tabelle2").Range("B65536").End(xlUp).Offset(1, 0).Row Worksheets("Tabelle2").Cells(erste_leere_Zeile, 1).PasteSpecial Paste:=xlValues ´kopierte Zeile einfügen End If End Sub [/i] --------------------------------------- Modul zum löschen der Leerzeilen: [i] Sub Leerzeilen_löschen() Application.ScreenUpdating = False Range("B2:B65536").SpecialCells(xlCellTypeBlanks). _ EntireRow.Delete End Sub [/i]

Antwort 1 von coros

Hi nerwoest,

kopiere nachfolgenden Code in das VBA Projekt der Tabelle, in dem sich die CheckBox befindet.

Private Sub CheckBox1_Click()
Application.ScreenUpdating = False
If CheckBox1.Value = True Then
Range("3:3").Copy
erste_leere_Zeile = Worksheets("Tabelle2"). _
Range("B65536").End(xlUp).Offset(1, 0).Row
Worksheets("Tabelle2").Cells(erste_leere_Zeile, 1). _
PasteSpecial Paste:=xlValues
End If
If CheckBox1.Value = False Then
erste_leere_Zeile = Worksheets("Tabelle2"). _
Range("B65536").End(xlUp).Offset(1, 0).Row - 1
Worksheets("Tabelle2").Rows(erste_leere_Zeile).ClearContents
Range("B2:B65536").SpecialCells(xlCellTypeBlanks). _
EntireRow.Delete
End If
End Sub


Bei dem Code wird die Zeile 3 kopiert und in die erste freie Zeile in Tabelle2 eingefügt, wenn die CheckBox angehakt wird. Wird der Haken entfernt, wird die zuletzt eingefügte Zeile wieder gelöscht und die Leerzeilen werden ebenfalls gelöscht. Ich weiß jetzt zwar nicht, warum die Leerzeile gelöscht weren soll, da sich die Leerzeile ja sowieso am Ende der Daten befindet, aber Du wirst schon Deine Gründe haben. Da die Zeile ja in die erste freie Zeile kopiert wird und somit dann auch die letzte belegte Zeile ist, müsste die Leerzeile nicht gelöscht werden, denn wenn die Zeile gelöscht wird, befinden sich doch nur noch Leerzeilen dahinter.
Ich hoffe nicht, dass Du in der Tabelle2, nachdem die Zeile eingefügt wurde, noch irgendwie Daten in den nachfolgenden Zeile eingibst. Denn dann wird der Code, nachdem die Datei einmal beendet wurde, nicht mehr funktionieren. Dann müsste der Code anders aufgebaut sein. Wenn das aber so sein sollte, dann melde Dich noch mal, dann werde ich Dir einen anderen Code erstellen.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von coros

Hi ich noch mal.

Vergiss den vorigen Code, da war ein kleiner Fehler drinn. Nimm den nachfolgenden.

Private Sub CheckBox1_Click()
Application.ScreenUpdating = False
If CheckBox1.Value = True Then
Range("3:3").Copy
erste_leere_Zeile = Worksheets("Tabelle2"). _
Range("B65536").End(xlUp).Offset(1, 0).Row
Worksheets("Tabelle2").Cells(erste_leere_Zeile, 1). _
PasteSpecial Paste:=xlValues
End If
If CheckBox1.Value = False Then
erste_leere_Zeile = Worksheets("Tabelle2"). _
Range("B65536").End(xlUp).Offset(1, 0).Row - 1
Worksheets("Tabelle2").Rows(erste_leere_Zeile).ClearContents
Worksheets("Tabelle2").Range("B2:B65536").SpecialCells(xlCellTypeBlanks). _
EntireRow.Delete
End If
End Sub


Bei dem Code aus dem letzten Beitrag wurde nicht die Leerzeile in Tabelle 2 gelöscht, sondern in dem Tabellenblatt, in dem die CheckBox sich befindet. Sorry.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 3 von nerwoest

Hallo coros!
Erstmal vielen Dank für die Hilfe!!!

Was ich mit dem "löschen der leeren Zeilen" meinte, war folgendes:
Ich muss Zeile 1, 2, 3 in der Reihenfolge kopieren können und wenn ich die Checkbox aus Zeile 2 deaktiviere muss Zeile zwei aus der Tabelle gelöscht werden und Zeile drei eins aufrücken (die leere Zeile füllen).
Mit deinem Code wird ja, egal welche Checkbox ich deaktiviere, die letzte eingefügte Zeile gelöscht. Es soll aber genau die Zeile gelöscht werde, die mit dieser Checkbox verknüpft ist.
Vielleicht hatte ich mich da etwas undeutlich ausgedrückt.

Es soll halt eine Auswahl möglich sein, in der ich beliebige Zeilen miteinander vergleichen kann und im Diagramm darstelle.

Falls du nochmal ein paar Minuten opferst bin ich dir, oder auch anderen Helern, schonmal vorab Dankbar!!

Gruß,
nerwoest

Antwort 4 von coros

Hi nerwoest,

verstehe ich das nun richtig: Du hast 3 CheckBoxen. Mit CheckBox1 kopierst Du Zeile 1, mit CheckBox2 die Zeile 2 und mit der 3. die Zeile3? Dann wird die ganze Sache schon etwas schwieriger. Denn man kann zwar mittels eines VBA Codes merken, in welche Zeile kopiert wurde, aber wenn gelöscht und verschoben wurde, bedingt durch das Abwählen der Checkboxen, stimmen diese Zeilenangaben dann nicht mehr. Meine Frage dazu, besteht die Möglichkeit in Diener Datei eine Hilfsspalte zu nutzen z.B. die Spalte IV? Ich würde in die Spalte einen eindeutigen Schlüssel beim Kopieren schreiben, nach dem man dann bei Abwahl der CheckBoxen mittels For/ Next Schleife suchen läßt und somit die richtige Spalte löschen läßt. Der Code würde dann folgnedermaßen aussehen.

Private Sub CheckBox1_Click()
Application.ScreenUpdating = False
If CheckBox1.Value = True Then
Range("1:1").Copy
erste_leere_Zeile = Worksheets("Tabelle2"). _
Range("B65536").End(xlUp).Offset(1, 0).Row
Worksheets("Tabelle2").Cells(erste_leere_Zeile, 1). _
PasteSpecial Paste:=xlValues
Worksheets("Tabelle2").Cells(erste_leere_Zeile, 256) = "1"
End If
If CheckBox1.Value = False Then
erste_leere_Zeile = Worksheets("Tabelle2"). _
Range("B65536").End(xlUp).Offset(1, 0).Row
For Wiederholungen = 1 To erste_leere_Zeile
If Worksheets("Tabelle2").Cells(Wiederholungen, 256) = "1" Then
Worksheets("Tabelle2").Rows(Wiederholungen).Delete
End If
Next
End If
End Sub


Bei dem Code wird wenn die CheckBox1 aktiviert wird, die Zeile1 in Tabelle2 in die erste freie Zeile kopiert. In Spalte IV wird in die selbe Zeile eine 1 eingtragen. Wenn nun durch z.B. weitere CheckBoxen Zeilen in Tabelle2 kopiert werden und die CheckBox1 wieder deaktiviert wird, sucht der Code in Spalte IV nach der Zahl1. Wenn gefunden, wird die komplette Zeile gelöscht. Wenn Du mehrere CheckBoxen hast, dann vergebe für z.B. CheckBox2 die Zahl 2, für CheckBox3 die 3 usw. Dann wird immer die Zeile die zu der CheckBox gehört, gelöscht. Ach übrigens, die Spalte, in die die Zahlen geschrieben werden, kannst Du auch ausblenden und somit sind die Zahlen dann auch nicht sichtbar.

Ich hoffe, das die Lösung dem, was Du erreichen möchtest, ein Stück näher gekommen ist. Bei Fragen oder wenn die Lösung noch nicht richtig ist, melde Dich.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 5 von nerwoest

hi coros!

ich habs jetzt mal mit den ersten drei zeilen probiert - und es klappt! *luftsprüngemach*

vielen dank für die schnelle und super hilfe (auch im namen von cheffe, der jetzt endlich eine vernünftige tabelle bekommt ;-))

nerwoest

p.s.: ich kenn das supportnet erst seit kurzem - erstes fazit: hut ab, hier wird einem noch geholfen!

Antwort 6 von nerwoest

eiiiiin hab ich noch ...

erstmal vorab: o.g. funktioniert jetzt alles wunderbar!
jetzt wäre, was mir grade erst auffiel, folgendes noch interessant:

wenn ich meine tabelle nach einer spalte sortiere, kann ich irgendwie die kontrollkästchen mitsortieren lassen? nach dem sortieren passt ja sonst nichts mehr zusammen. die aktivierten kontrollkästchen müsen ja auch vor den aktivierten zeilen stehen und umgekehrt!

die checkboxen sind ja zellunabhängig wenn ich das richtig sehe...
("von zellposition abhängig" hab ich zwar aktiviert, er machts aber nicht :-/ )

gruß & thx,
nerwoest

Antwort 7 von coros

Moin nerwoest ,

sorry, da kann ich Dir nicht mehr helfen. Mir ist nicht bekannt, dass das, bzw. ob das funktioniert. Das mit der Zellposition funktioniert nur z.B. beim Filtern durch z.B. den Autofilter.

Aber vielleicht kennt ja jemand anderes eine Lösung.

MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 8 von nerwoest

zitat ich selber:
Zitat:
... jetzt wäre, was mir grade erst auffiel, folgendes noch interessant...


So ein Mist! Aus dem "wäre" ist jetzt bei näherer Betrachtung ein "Muss" geworden.
Jetzt hab ich Dank Deiner Hilfe (coros) die Kontrollkästchen soweit hinbekommen, muss jetzt aber nach verschiedenen Spalten sortieren können. Damit werden meine Checkboxen hinfällig, da sie festen Zeilen zugeordnet sind, in denen aber nach jeder Sortierung was anderes drinsteht.
Es ist aber erforderlich, Zeilen zu markieren, danach nach einer anderen Spalte zu sortieren, wieder Zeilen auswählen and-so-on...

Fällt da jemandem was anderes zu ein? Oder eine Erweiterung der oberen posts?

Gruß & Danke,
nerwoest

Antwort 9 von nerwoest

EDIT:

Jetzt hab ich ne Idee: ich hau die CheckBoxes weg und knall einen Button vor die Zeile, welcher mir die jeweilige Zeile einfärbt und in die zweite Tabelle kopiert.
Zusätzlich einen "Ober-Button", welcher alle zeilen wieder weiß macht und die zweite Tabelle bereinigt.


... mal schauen was das wird ... jetzt kommt der Anfänger ;-)


was mir dann natürlich fehlt, ist das löschen einzelner zeilen... hmm, mal schauen

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: