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

Zeilen zwischen zwei listObjekts verschieben

Zeilen zwischen zwei listObjekts verschieben
21.07.2019 08:45:52
Andreas
Hallo an alle
Ich habe leider ein Problem, das mich komplett überfordert, hab nur sehr wenig Ahnung vom Programmieren. Ich möchte Daten möglichst effizient zwischen zwei Intelligenten Tabellen (iTabellen / listObjekt) hin und her schieben. Aus der Tabelle iTabDaten auf dem Tabellenblatt Daten sollen die Datenzeilen in die Tabelle iTabBearbeiten auf das Tabellenblatt "Zeitraum" verschoben/Ausgeschnitten werden, wenn der Los Knopf gedrückt wird.
Aber nur die Datenzeilen, die innerhalb des in „iTabBearbeiten“ angegebenen Zeitraumes liegen oder kein Bis Datum haben und somit noch offen sind. In „iTabDaten“ stehen die von-bis Datumsangaben in Spalte D und E. Ich habe gelesen, dass man die Daten zuerst in ein Datenfeld schreiben sollte und dann auf einmal in die Zieltabelle Kopieren sonnst dauert das ganze viel länger, aber da weiß ich auch nicht wie ich das anstelle. Das ganze soll eine art bearbeiten Maske sein. Die dann später rechts ausserhalb der Tabelle alle möglichen Hilfsmittel bekommt (Bedingetformatierungen ,Formeln usw.) bekommt die aber nicht im "iTabDaten" sein sollen.
Ich werde da wohl um ein Makro nicht herumkommen. Hab es zwar versucht und mir alles Mögliche über die listObjekt im vba durchgelesen bin aber Gradios daran gescheitert. Kann mir da bitte jemand helfen bzw. wenn das in Excel zu aufwändig ist oder aus irgendeinem Grund nicht geht dann sagt es mir bitte.
Sub DatenBearbeiten()
Dim Von As String
Dim Bis As String
Dim wsZeitraum As Worksheet
Dim wsDaten As Worksheet
Dim iTabBearbeiten As ListObject
Dim iTabDaten As ListObject
Dim Datenfeld As Variant 'Zwischenspeicher
Set wsZeitraum = ThisWorkbook.Worksheets("Zeitraum")
Set wsDaten = ThisWorkbook.Worksheets("Daten")
Set iTabBearbeiten = wsZeitraum.ListObjects("iTabBearbeiten")
Set iTabDaten = wsDaten.ListObjects("iTabDaten")
Von = wsZeitraum.OLEObjects("TextBox1").Object.Text 'Von
Bis = wsZeitraum.OLEObjects("TextBox2").Object.Text 'Bis
' Aber wie weiter
End Sub
Grüße
Andreas

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
21.07.2019 09:01:13
Zeilen zwischen zwei listObjekts verschieben
Im prinzip wäre die Reichenfolge
• Datumsänderung /Los Taste
• Bestehende Daten aus iTabBearbeiten nach iTabDaten Verschieben
• In iTabDaten Suchen und Auschneiden in Datenfeld
• Datenfeld in leere iTabBearbeiten Übernehmen
• Bei erneuter Datumsänderung /Los Taste - wider von Vorne beginnen.
Oder ist es besser die derzeit verwendeten Datenzeilen in iTabDaten zu Makieren und später zu überschreiben? Aber wärend des bearbeitens kommen zeilen hinzu bzw. werden gelöscht. (Mir Raucht schon der Kopf :(
Damit man es sich besser vorstellen kann:
https://www.herber.de/bbs/user/131011.xlsm
Danke für die Hilfe
Grüße Andreas
Anzeige
AW: Zeilen zwischen zwei listObjekts verschieben
21.07.2019 17:05:21
Andreas
Ich hab bei meinem letzten Beitrag vergessen das Kontrollkästchen für die noch offene Frage anzuhacken.
Nachträglich geht das glaub ich nicht.
Grüße Andreas
Ist das zu aufwändig? oT
22.07.2019 16:16:33
Andreas
AW: Zeilen zwischen zwei listObjekts verschieben
22.07.2019 19:14:03
ChrisL
Hi Andreas
Die Selektion der Daten scheint mir bis auf ein Paar Verständnisfragen zum Kriterium (Umgang mit teilw. Überschneidungen und ob offene in Abhängigkeit zum Zeitraum stehen) kein grosses Thema. Makrorekorder, Autofilterkriterien setzen, Copy/Paste. Im Code musst du dann nur noch die Datumswerte durch die Textbox ersetzen und das Datum formatieren. (Filter sollte etwa so schnell sein wie mit Datenfeld)
Was mich abschreckt ist deine Aussage: ...soll eine art bearbeiten Maske sein.
Die Synchronisation zurück in die Datentabelle sehe ich kritisch. Klar kann man die Daten irgendwie zurück kopieren (löschen und neu schreiben), aber es ist eine unkontrollierte Datenerfassung. Es fehlt der eindeutige Schlüssel (Laufnummer, die nicht manipuliert werden kann) zum Datensatz. Auch im Handling hätte ich Fragezeichen (z.B. vor dem Speichern vergessen zu synchronisieren). Oder was wenn der Code die alten Datensätze löscht, aber beim Übertrag einen VBA Fehler erzeugt.
Persönlich ist mir alles zu aufwändig, für ein m.E. "wackeliges" Ergebnis.
Sieht mir auch ein wenig nach einem weiteren Urlaubs-, Projekt- oder Schichtplaner aus. Nicht böse gemeint, aber gefühlt jeder zweite im Forum erfindet das Absenzmanagement neu. Da bin ich durch ;)
Ich sehe auch nicht ganz ein, wieso man nicht einen Autofilter setzen kann und die Daten direkt in der Ursprungstabelle bearbeitet. Ggf. kann man das Setzen des Filters noch mit einem Makro/Button unterstützten (z.B. Button "alle offenen").
Falls du dich ernsthaft mit VBA beschäftigen willst, dann empfehle ich dir ein Userform für die kontrollierte Datenerfassung (kontrollierter als vorher). Userform-Eingabemasken sind der Klassiker, dazu findest du Beispiele und Videos im Netz.
cu
Chris
Anzeige
AW: Zeilen zwischen zwei listObjekts verschieben
22.07.2019 21:51:28
Andreas
Hallo Chris
Erstmal danke für deine Antwort und deine Anmerkungen und entschuldige, wenn ich jetzt vielleicht dumme Fragen stelle.
Bei setzen des Auto Filters hab ich das Problem das ich nicht weiß wie ich den so einstellt das mir alle Kriterien gleichzeitig anzeigt und zwar nehmen wir an das ich den Zeitraum vom 12.07 – 20.07.19 sehen will.
o Zeilen innerhalb des angegeben Zeitraums . bsp.16.07 bis 17.07 (das ist klar)
o Zeilen die den Zeitraum schneiden bsp. 02.06 bis 25.08
o Zeilen die noch kein Enddatum haben bsp 11.07 bis
o Zeilen die Gar keine Datumsangaben haben
Das mit dem „bearbeiten maske“ war vielleicht etwas unglücklich ausgedrückt. Es ist Teil eines Einsatzplan aber nicht in der Art eines Schichtplans, Absenzen landen zwar darin werden aber aus einer eigenen Erfassung geholt. Ich glaub „Übersichtsblatt für einen Zeitraum das mit anderen Daten über formeln noch ergänzt wird und aus dem heraus ich daten einer bestimmten Tabelle ändern/hinzufügen möchte“. Beschreibt es am besten (glaub ich). Ich hab nach was vergleichbaren gegoogelt aber nicht gefunden:(
Was das Synchronisieren angeht das ist eben mein gröbstes Problem :(. Mit einer Userform hab ich das Problem das ich dort bedingte Formatierungen nicht einsetzen kann und mit den Formeln nicht mehr flexibel bin. Deswegen wollte ich es irgendwie in der Tabelle machen. Was das speichern angeht bei jedem Datumswechsel würde synchronisiert und gespeichert werden.
Hättest du vielleicht ein Code stück für mich das mir die Datensätze nur rüber kopiert. Und ev. Wie es mit ausschneiden aussehen würde? Bzw die Antwort auf die Frage mit den filtern würd mir auch reichen. Wenn das auch nicht geht dann aber trotzdem vielen Dank für deinen input.
Danke und Grüße
Andreas
Anzeige
Datum filtern per TextBox
23.07.2019 08:28:25
Andreas
Hallo
Ich hab auf dem Tab "Daten" zwei TextBoxen eingefügt und folgendes probiert auf grundlage des Makrorekorders
.
Sub DatenBearbeiten()
Dim Von As String
Dim Bis As String
Dim wsZeitraum As Worksheet
Dim wsDaten As Worksheet
Dim iTabBearbeiten As ListObject
Dim iTabDaten As ListObject
Set wsZeitraum = ThisWorkbook.Worksheets("Zeitraum")
Set wsDaten = ThisWorkbook.Worksheets("Daten")
Set iTabBearbeiten = wsZeitraum.ListObjects("iTabBearbeiten")
Set iTabDaten = wsDaten.ListObjects("iTabDaten")
Von = ">=" & wsDaten.OLEObjects("TextBox1").Object.Text 'Von
Bis = ">=" & wsDaten.OLEObjects("TextBox2").Object.Text 'Bis
iTabDaten.Range.AutoFilter Field:=4, Criteria1:=Von, Operator:=xlOr, Criteria2:=Bis
End Sub
Aber es blendet alles aus
Grüße Andreas
Anzeige
AW: Datum filtern per TextBox
23.07.2019 10:17:10
Andreas
Hallo
ALso mit
iTabDaten.Range.AutoFilter Field:=4, Criteria1:=">=" & CLng(Von), Operator:=xlOr, Criteria2:=">=" & CLng(Bis)

geht es, jetzt fehlen mir nur noch die Zeilen die keinen Datumswert haben.
Ich weis jetzt nicht ob ich dafür einen neuen Thread aufmachen soll oder nicht, da es ja eine andere fragestellung ist. Aber ist es möglich die ausgefilterten daten nach unten ans ende der tabelle zu sortieren so das die liste nicht durch ausgeblendete zeilen unterbrochen wird.
Grüße Andreas
AW: Datum filtern per TextBox
23.07.2019 17:56:07
ChrisL
Hi Andreas
Sorry, hatte viel zu tun. Vielleicht komme ich morgen oder übermorgen dazu es nochmals anzuschauen.
Die Kombination der Autofilterkriterien könnte tatsächlich zum Problem werden.
Falls du einen neuen Beitrag machst, bitte die zwei mit einander verlinken.
cu
Chris
Anzeige
AW: Datum filtern per TextBox
23.07.2019 19:42:37
ChrisL
Hi Andreas
Nochmals nachgedacht. Das 3. Kriterium (ODER leer) bekommst du mit dem Autofilter nicht mehr einfach hin. Das Limit ist bei 2 Kriterien, ausser du benutzt eine Listenauswahl.
Evtl. ist der Spezialfilter / Advanced Filter eine Alternative.
Ansonsten könntest du mal schauen ob du eine ADO Verbindung hin bekommst.
https://www.online-excel.de/excel/singsel_vba.php?f=135
Test-SQL: "SELECT * FROM TabelleName"
Nimm die Late-Binding Variante und achte darauf, dass die Verbindungseigenschaften zu deiner Excel-Version passen.
Wenn es klappt, poste den Code und ich versuche dir zwischendurch mal den SQL-String zu ergänzen.
cu
Chris
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige