Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1524to1528
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
Daten von Eingabemaske in Datentabelle kopieren
19.11.2016 16:35:55
Eingabemaske
Hallo zusammen
https://www.herber.de/bbs/user/109553.xlsm
In der Tabelle Dateneingabe, werden die Projektdaten und Stundenaufwendungen eingetragen. Mit den Button Speichern, sollen die Daten in die Tabelle Daten überführt werden. Zusätzlich soll der Projektname in die Tabelle Projektnamen geschrieben werden. Abschließend soll das Eingabeformular, die Zellinhalte der weissen Zellen gelöscht werden und eine MsgBox aufpoppen mit den Hinweis, dass die Daten erfolgreich gespeichert wurden.
Wie kann ich das mit VBA umsetzen, Danke für jede Hilfe.
Viele Grüsse,
Peter

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten von Eingabemaske in Datentabelle kopieren
19.11.2016 18:57:55
Eingabemaske
Hier was schnelle zusammen gebautes
Gruß Basti
Sub Load()
Dim WsDeingabe As Worksheet
Dim WsDaten As Worksheet
Dim WsPnamen As Worksheet
Dim Strarray(8) As Variant
Dim zell As Range
Dim LastCellWsDeingabe As Long
Dim LastcolumnWsDeingabe As Long
Dim LastCellWsPnamen As Long
With ThisWorkbook
Set WsDeingabe = .Worksheets("Dateneingabe")
Set WsDaten = .Worksheets("Daten")
Set WsPnamen = .Worksheets("Projektnamen")
End With
With WsDeingabe
For Each zell In .Range("B4:B7")
Strarray(x) = zell
x = x + 1
Next
With WsPnamen
LastCellWsPnamen = .Columns(1).Find("*", .Cells(1, 1), xlValues, xlWhole, , xlPrevious).Row + 1
.Cells(LastCellWsPnamen, 2) = Strarray(0)
End With
LastCellWsWsDaten = WsDaten.Cells(WsDaten.Rows.Count, 1).End(xlUp).Row + 1
LastCellWsDeingabe = .Cells(.Rows.Count, 1).End(xlUp).Row
LastcolumnWsDeingabe = .Rows(10).Find("*", .Cells(10, 1), xlValues, xlWhole, , xlPrevious). _
Column
For r = 11 To LastCellWsDeingabe
For c = 1 To 3
Strarray(x) = .Cells(r, c)
x = x + 1
Next
For cc = 4 To LastcolumnWsDeingabe
Strarray(x) = Format(.Cells(10, cc), "MMM YY")
x = x + 1
If .Cells(r, cc) = "" Then GoTo Überspringen
Strarray(x) = .Cells(r, cc)
WsDaten.Cells(LastCellWsWsDaten + y, 1).Resize(1, UBound(Strarray) + 1) = Strarray
y = y + 1
Überspringen:
x = 7
Next
x = 4
Next
.Range(.Cells(11, 1), .Cells(LastCellWsWsDaten, LastcolumnWsDeingabe)).ClearContents
'.Range(.Cells(4, 2), .Cells(7, 2)).ClearContents ' hier kann man den bereich nicht löschen da  _
du zellen verbunden hast ( würde ich lassen wenn du mit vba arbeitest)
End With
End Sub

Anzeige
AW: Datensätze mehrfach, Datenüberprüfung?
20.11.2016 14:36:45
Peter
Hallo Bastian
Danke für Deine Antwort, funktioniert super. Die Daten werden jedoch immer in die Tabelle geschrieben, auch wenn es einen Datensatz bereits gibt. D.h. ich habe dann den selben Datensatz doppelt oder mehrfach in der Tabelle.
D.h. ich brauche noch eine Datenüberpüfung. Wenn ein Datensatz bereits vorhanden ist, soll mit einem MsgBox abgefragt werden, ob der bestehende Datensatz mit den neuen Daten überschrieben werden soll oder nicht. Wenn ja, dann wird überschrieben, wenn nein, dann werden die Daten des entsprechenden Datensatzes nicht in die Tabelle Daten geschrieben.
Die Datensatz ID ist der Projektname (SpalteA) + Ressourengruppe (SpalteE).
Wie muss ich den Code anpassen, damit diese Datenüberpüfung vorgenommen wird?
Danke
Viele Grüsse,
Peter
Anzeige
AW: Datensätze mehrfach, Datenüberprüfung?
20.11.2016 15:41:59
Peter
Hallo Bastian
Ich muss mich korrigieren, die Datensatz-ID ist:
Projektname (Spalte A) + Ressourcengruppe (Spalte E) + Monat (Spalte H).
Vielleicht stellt sich die Frage, ob eine Datensatznummer, als ID hinzugefügt werden soll, muss?
Danke
Viele Grüsse,
Peter
AW: Datensätze mehrfach, Datenüberprüfung?
20.11.2016 16:06:24
Peter
Hallo Bastian
Und nun zum 3. Mal, mir ist noch folgendes aufgefallen:
Die Datumswerte sind verändert, das Datum sollte immer jeweils der 1. eines Monats sein. Jedoch wird das Datum, entweder als Text (Zellwert z.B. Mai 17, anstatt 01.05.2017), oder dann verändert als der 16. oder 17. eines Monats eingefügt?
Wie könnte man diesen Kopierfehler beheben?
Danke Dir.
Viele Grüsse,
Peter
Anzeige
AW: noch zwei offene Punkte?
21.11.2016 12:45:38
Peter
Hallo Basti
https://www.herber.de/bbs/user/109605.xlsm
Funktioniert super, vielen Dank!
Folgende Probleme habe ich noch:
- Ich habe versucht die Funktion "Option Explicit" im Code hinzuzufügen, darauf hin wurde die Fehlermeldung "Variable nicht definiert" angezeigt und "Strarray (x) = zell " wurde markiert?
- Leider verstehe ich den Code noch nicht ganz und konnte diesen, nach hinzufügen zusätzlicher Spalten (nach Rücksprache, gelb markierte Felder, bei Register Eingabe und Dateneingabe) nicht entsprechend anpassen.
Könntest Du mir den Code anpassen und die Schlüsselfunktionen ein wenig Kommentieren, so dass ich bei einer erneuten Erweiterung diesen selber anpassen könnte?
Danke
Viele Grüsse,
Peter
Anzeige
AW: noch zwei offene Punkte?
21.11.2016 17:42:52
Bastian
Uf ja =D
Hier
Option Explicit
Private Sub Button_Speichen_Click()
Dim WsDeingabe As Worksheet
Dim WsDaten As Worksheet
Dim WsPnamen As Worksheet
Dim Strarray(14) As Variant
Dim DatenArray() As Variant
Dim zell As Range
Dim LastCellWsDeingabe As Long
Dim LastCellWsWsDaten As Long
Dim LastcolumnWsDeingabe As Long
Dim LastCellWsPnamen As Long
Dim x As Long, r As Long, c As Long, cc As Long, rr As Long
With ThisWorkbook
Set WsDeingabe = .Worksheets("Dateneingabe")
Set WsDaten = .Worksheets("Daten")
Set WsPnamen = .Worksheets("Projektnamen")
End With
With WsDeingabe
For Each zell In .Range("B2:B9") 'B4:B7 zuvor
Strarray(x) = zell
x = x + 1
Next
With WsPnamen
LastCellWsPnamen = .Columns(1).Find("*", .Cells(1, 1), xlValues, xlWhole, , xlPrevious).Row + 1  _
'Cells(Zeile,Spalte).
On Error Resume Next
If Not Application.WorksheetFunction.Match(Strarray(0), .Columns(2), 0) Then
.Cells(LastCellWsPnamen, 2) = Strarray(0)
End If
End With
LastCellWsDeingabe = .Cells(.Rows.Count, 1).End(xlUp).Row
LastcolumnWsDeingabe = .Rows(10).Find("*", .Cells(10, 1), xlValues, xlWhole, , xlPrevious). _
Column
For r = 11 To LastCellWsDeingabe
For c = 1 To 3
Strarray(x) = .Cells(r, c)
x = x + 1
Next
For cc = 4 To LastcolumnWsDeingabe
Strarray(x) = .Cells(10, cc)
x = x + 1
If .Cells(r, cc) = "" Then GoTo Überspringen
Strarray(x) = .Cells(r, cc)
DatenArray = WsDaten.Range("A1").CurrentRegion
For rr = LBound(DatenArray, 1) To UBound(DatenArray, 1)
If DatenArray(rr, 1) & "_" & DatenArray(rr, 9) & "_" & DatenArray(rr, 12) = Strarray(0) & "_" &  _
Strarray(8) & "_" & Strarray(11) Then
If MsgBox("Soll der Datensatz >>" & DatenArray(rr, 1) & "_" & DatenArray(rr, 9) & "_" & Format( _
DatenArray(rr, 12), "MMM YY") & "
Gruß Basti
Anzeige
AW: noch zwei offene Punkte?
21.11.2016 20:00:42
Michael
Hi,
weil die Frage offen war, habe ich sie mir auch nochmal angesehen.
Währenddessen hatte Basti ja schon geantwortet, aber weil ich schon Zeit investiert hatte...
Die Datei enthält Bastis neuestes und ein weiteres Makro von mir, das etwas kompakter ist und evtl. einfacher nachzuvollziehen (?): https://www.herber.de/bbs/user/109618.xlsm
Gruß,
Michael
AW: MIchalelösung, noch drei offene Punkte?
22.11.2016 17:14:59
Peter
Hallo Michael und Basti
@ Michael: Danke für Deine Lösung, sie funktioniert bestens und ja diese Lösung ist für mich verständlicher. Drei Punkte fehlen mir noch:
- Was noch fehlt, ist die Datenabfrage auf Doppelte, kannst Du mir diese ebenfalls einbauen? D.h. wenn ein Datensatz schon vorhanden ist, soll abgefragt werden, ob der bestehende Datensatz überschrieben werden soll oder nicht. So das sichergestellt ist, dass keine Doppelte vorkommen. Ideal wäre, wenn man nicht für jeden Datensatz einzel bestätigen muss ja oder nein, sondern nur einmal, für alle Datensätze die rüber kopiert wurden. Der Datensatzschlüssel ist der Projektname + Ressourcengruppe + Monat.
- Wäre es möglich, beim Kopieren/Speichern des Projektnamens im Register Projektnamen, den Projektnamen nur 1x vorhanden zu haben, so dass wenn ein Projektname bereits vorhanden ist, dass dieser einfach, ohne Abfrage, überschrieben wird, so dass ein Projektname nur einmalig in der Liste vorhanden ist?
- Was als zusätzliche Funktion hinzukommt ist die Datenabtrage. In der Listbox sollen alle Projekte aufgelistet sein. Markiert man ein Projektname, dann sollen alle Datensätze des Projekts angezeigt, in die entsprechenden Fehlder geschrieben werden. Neu sind Projektstart + Projektdauer als Datenpunkt mit dabei, werden diese Daten eingesetzt, dann werden automatisch alle benötigen Fehler angezeigt. Wie könnte man diese Funktion einbauen?
https://www.herber.de/bbs/user/109639.xlsm
Mit dieser Funktion will ich das Projekt abschliessen (hinzukommen dann noch weitere Pivotscharts und ein Dashboard), weitere Funktionen sollen soweit nicht dazu kommen.
Es ist mir bewusst, wie Ihr mir geholfen habt, aus diesem Grund möchte ich gerne zum Dank einen symbolischen Betrag spenden, wie kann man so was machen?
Danke
Viele Grüsse,
Peter
Anzeige
MIchalelösung, noch drei offene Punkte?
23.11.2016 14:36:38
Michael
Hallo Peter,
die Punkte sind lösbar, und Dein Angebot wegen eines Obulus nehme ich gerne an (allerdings hat Basti ja sicher im Vorfeld schon mehr Zeit investiert als ich): meine E-Mail-Adresse findest Du hier in den Profilen: https://www.herber.de/cgi-bin/profile/call_profile.pl?user=1857094
Wenn wir schon dabei sind, möchte ich Dir aber anbieten, die Struktur von dat Janze mal zu zerpflücken, zumindest rein gedanklich.
Ich habe mich gefragt, wie die Eingabe denn "immer" funktionieren soll... Die "Dateneingabe" sieht ja recht nett und übersichtlich aus, und ich könnte mir vorstellen, daß es für nachträgliche Änderungen komfortabel wäre, die Daten für ein bestimmtes Projekt wieder in diese "Ansicht" (als "Formular") einzulesen, ggf. Änderungen vorzunehmen und sie dann wieder in die "Listenansicht" unter "Daten" zu überführen. Ob man dann bei jedem einzelnen, geänderten Wert noch eine mgsbox braucht? Das hält nur den Betrieb auf: vielleicht einen weiteren Button „Änderungen übernehmen“ oder so, der alle vorhandene „glattbügelt“ und nur dann schreit, falls ein alter, vorhandener Datensatz übrig bleiben würde (falls in der "Eingabe" ein Wert gelöscht wurde).
[Dazu könnte man bei allen in die Eingabe gelesenen Zeilen ein Kennzeichen in einer extra-Spalte setzen und hinterher z.B. durch das Datum der letzten Änderung ersetzen.]
[Hier ist ein Knackpunkt: es werden ja nur die Ressourcen-Gruppen in "Daten" geschrieben, bei denen auch Werte unterm Datum eingegeben wurden: sind die R-Gen immer gleich? Wenn nicht, müßte man die pro Projekt auch "irgendwo" mit speichern, damit die Blanko-Gruppen beim Einlesen ins "Formular" zur Verfügung gestellt werden können: z.B. Pack-Blister]
Ok, bis hierher ist das ja Dein letztgenannter Punkt "Abfrage".
Dann gibt es aber ein weiteres Thema: die linken Spalten in "Daten" stimmen pro Projekt ja überein: das schreit geradezu danach, in eine "normalisierte Datenbankform" überführt zu werden.
Das heißt, man könnte, anstatt einen kombinierten Schlüssel, der sich aus eingegebenen Daten zusammensetzt (wie Du schreibst z.B.: Projektname + Ressourcengruppe + Monat) eine "eindeutige" laufende Nummerierung verwenden (oder ist der Projektname eindeutig?) und statt einer dann ZWEI Tabellen: eine mit dem "Kopf" (also den linken Spalten) und eine mit den reinen (Monats-) Daten dazu. Um zwischen beiden Tabellen zu wechseln könnte man z.B. ein Doppelklickevent nehmen, das zu den jeweils passenden (= "verknüpften") Datensätzen (=Zeilen) hüpft.
Stichworte: "Vermeidung von Redundanzen", "Normalisierung von Datenbanken"
Ob man das umsetzen *muß*? Na, sagen wir mal so: angenommen, in den Kopfdaten würde sich was ändern, z.B. der Projektleiter (oder die Laufzeit, was sicher immer wieder mal vorkommen kann), dann müßtest Du so, wie es ist, in diversen Zeilen (in "Daten") Änderungen vornehmen (wobei es eben vorkommen kann, daß man dabei Fehler macht, z.B. nicht alle dazugehörigen Zeilen ändert oder auch eine zu viel); wenn man das "sauber" in zwei Tabellen zerpflückt, muß die Änderung nur in *einer* Zeile vorgenommen werden, nämlich in der zweiten Tabelle - die ja übrigens schon angedacht ist: "Projektnamen" - die heißt dann eben "Projektdaten".
Was ich noch viel wichtiger finde, ist die Verbesserung der Übersichtlichkeit: Wenn nur der eindeutige Projektname (wenn er das denn ist) dasteht und die Zeiten, bleibt dem Anwender der Anblick immer gleicher Spalten erspart.
Um das alles zu durchdenken und sich für eine bestimmte Vorgehensweise zu entscheiden, sollten wir vielleicht auch mal telefonieren.
Wenn Du mir mailst, melde ich mich morgen nachmittag.
Schöne Grüße,
Michael
Anzeige
Nachtrag
23.11.2016 15:21:59
Michael
Hi Peter,
sorry, die Daten sind ja doch schon alle vorhanden: ich hatte übersehen, daß die Resourcen ja bereits standortabhängig in einem extra Blatt stehen...
Schöne Grüße,
Michael
AW: MIchalelösung, noch drei offene Punkte?
23.11.2016 18:30:51
Peter
Hallo Michael
Habe Dir gemailt...
Danke und bis dann.
Viele Grüsse,
Peter
AW: noch zwei offene Punkte?
22.11.2016 16:22:55
Peter
Hallo Basti
Funktioniert super, vielen Dank!
Jedoch verstehe ich den Code noch immer nicht, er ist für mich schwierig zu verstehen.
Den Code vom Micheal ist für einfacher nachvollziehbar und ich möchte mit diesem Code weiterfahren. Jedoch fehlt im Code von Michael noch die Datenüberprüfung auf Eintrag schon vorhanden. Ich werde Michael fragen, ob er das einbauen könnte.
Danke Dir nochmals für Deine Hilfe und super Lösung, funktioniert sehr gut!
Viele Grüsse,
Peter
Anzeige
AW: Datensätze mehrfach, Datenüberprüfung?
20.11.2016 18:42:18
Bastian
Ah ok sorry hab es nicht gelesen ich wered mal guckenw as man so tun kann
Gruß Basti
AW: Datensätze mehrfach, Datenüberprüfung?
20.11.2016 18:36:59
Bastian
Ja Peter deshalb sollte man am anfang wenn man sein Anliegen schildert alles mit aufführen was man will da es immer schwer ist irgend was wieder mit in der Programm rein zu stricken ;)
Und wovon soll der Eintrag verglichen werden ? von Projektname-Ressourcengruppe-Monat ?
Gruß basti
AW: Datensätze mehrfach, Datenüberprüfung?
20.11.2016 18:41:41
Bastian
Nur Projektname (SpalteA) + Ressourengruppe (SpalteE) ist keine eindeutige ID da es mehrere möglichkeiten gibt Da mehrere monate
Gruß Basti

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige