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

Automatisches Erstellen von Zeile in anderem Reite

Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 10:49:39
Zeile
Hallo zusammen,
ich habe nicht viel Erfahrung mit VBA und stehe vor folgendem Problem:
Ich habe in meinem Excel File einen Reiter "Hours", in welchem im rot markierten Bereich Zahlen eingetragen werden können. Sofern eine Zahl eingetragen wird, möchte ich erreichen, dass durch Drücken des Buttons "Update" im Reiter "Tabelle1" eine neue Zeile in "Tabelle1" erscheint, die dann aus dem Reiter "Hours" die Kostenstelle (Zelle A1), die Personalnummer (Zelle B1), die Leistungsart (Zelle C1), den Projektnamen (Spalte B des jeweiligen Eintrags), die PAS_nummer (Spalte C des jeweiligen Eintrags) und die eingetragene Zahl enthält. Hier eine Beispielsdatei:https://www.herber.de/bbs/user/116565.xlsm
Mit dem bisherigen Code, den ich habe, komme ich leider nicht weiter.
Es wäre schön, wenn sich einer von euch das anschauen könnte oder mir zumindest sagen könnte, wo ich einen ähnlichen Code, der mein Vorhaben in etwa abbildet, finden kann. Vielen Dank schon jetzt!!!

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 11:33:43
Zeile
Hi yummi,
zunächst mal danke, dass du es dir angeschaut hast!
Wenn ich den Update-Button allerdings drücke, passiert überhaupt nichts. Woran kann das liegen? Was passiert bei dir?
Viele Grüße und nochmals vielen Dank!!
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 11:40:23
Zeile
Hallo arek,
es war zwar noch ein kleienr bug drin.
änder aml:

wksDest.Cells(llastdest, 2).Value = wksdata.Cells(z, 2).Value

da steht im code anstelle der zweiten 2 eine 1.
wenn du zahlen in deienm roten bereich in Hours einträgst, dan nwird auch was kopiert.
gruß
yummi
Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 12:00:38
Zeile
Hi yummi,
super vielen Dank nochmal!
Wenn ich jetzt den Button drücke, kommt auch der Eintrag.
Allerdings erscheint immer nur ein Eintrag, d.h. trage ich in verschiedenen Zellen des roten Bereichs einen Wert ein, erscheint nur der letzte eingetragene Wert und die anderen werden sozusagen überschrieben. Ich würde aber gerne pro neuem Eintrag eine neue Zeile beginnen. Geht das?
Außerdem sollen neben den bereits vorhandenen Informationen noch die Kostenstelle (Zelle A1 in Hours), die Personalnummer (Zelle B1 in Hours) und die Leistungsart (Zelle C1 in Hours) in die Tabelle1 kopiert werden...Ist das möglich?
Nochmals vielen Dank für deine Hilfe!!
Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 12:10:11
Zeile
Hallo arek,
ersetz mal die funktion im code

Sub Update_Button()
Dim llastr As Long
Dim ilasts As Integer
Dim z As Long
Dim s As Integer
Dim llastdest As Long
Initialisiere
'lösche Tabelle1
wksDest.UsedRange.Offset(1, 0).Value = ""
llastr = BestimmeLetzteZeile(wksdata, 2)
ilasts = BestimmeLetzteSpalte(wksdata, 2)
llastdest = BestimmeLetzteZeile(wksDest, 1) + 1
For z = 5 To llastr
For s = 4 To ilasts
If wksdata.Cells(z, s).Value  "" Then
'zeile kopieren
wksDest.Cells(llastdest, 1).Value = wksdata.Cells(z, 1).Value
wksDest.Cells(llastdest, 2).Value = wksdata.Cells(z, 2).Value
wksDest.Cells(llastdest, 3).Value = wksdata.Cells(z, 3).Value
wksDest.Cells(llastdest, 4).Value = wksdata.Cells(z, s).Value
llastdest = llastdest + 1
End If
Next s
Next z
End Sub
wenn du nciht möchtest, das die alten Daten gelöscht werden bei update, dann musst du die zeile unter dem Komentar lösche Tabelle1 auskommentieren
Gruß
yummi
Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 13:17:47
Zeile
Hi yummi,
danke das mit dem neuen Eintrag und jeweils einer neuen Zeile funktioniert nun! Vielen Dank!!
Wie kann ich denn das mit den Kostenstellen, der Personalnummer und der Leistungsart noch lösen (siehe vorherige Nachricht)? Kannst du mir nochmal weiterhelfen? Wäre super und nochmal danke!!
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 13:35:04
Zeile
hallo arek
ist der selbe code mit kommentaren

For z = 5 To llastr   'durhläuft alle zeilen ab zeile 5
For s = 4 To ilasts   'durchläuft alle Spalten ab Spalte D (4)
If wksdata.Cells(z, s).Value  "" Then
'zeile kopieren
wksDest.Cells(llastdest, 1).Value = wksdata.Cells(z, 1).Value   'hier wird  _
selbe Zeile Spalte A übertragen z ist die Zeile auf Hours
wksDest.Cells(llastdest, 2).Value = wksdata.Cells(z, 2).Value  'hier Spalte B
wksDest.Cells(llastdest, 3).Value = wksdata.Cells(z, 3).Value  'hier Spalte C
wksDest.Cells(llastdest, 4).Value = wksdata.Cells(z, s).Value  'hier die Spalte  _
mit Zahl
llastdest = llastdest + 1
End If
Next s
Next z
Wenn Du also nur Zeile 1 für spalte A, B und C haben willst und nciht die aktuelle Zeile, dann ersetzte das z in den Zeilen die Spalte A, B und C kopieremnn (siehe Kommentar oben)
durch 1 (das wäre dann A1, B1 und C1 für jede Zeile
Gruß
yummi
Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 14:00:07
Zeile
Hi yummi,
nochmals danke für deine Antwort!! Ich glaube ich habe es nicht genau erklärt was ich möchte und deshalb versuche ich es nochmal: Im Moment ist es ja so, dass beim Knopfdruck die ganzen Einträge im rot markierten Bereich übertragen werden in Tabelle1 mit zugehörigem Projektnamen und der PAS_nummer. Diese Daten stehen dann in den Spalten B bis D. Zusätzlich möchte ich aber jetzt, dass die Daten, die in Zelle A1, B1, C1 (in Hours) auch in Tabelle1 übertragen werden und zwar in die entsprechende Zeile.
Habe ich mich verständlich ausgedrückt? Und ist das möglich?
Nochmals vielen Dank!!!
Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 14:26:23
Zeile
Hi yummi,
nochmals danke für deine Hilfe! Ich habe meinen Code nochmals angepasst und jetzt schaut er folgendermaßen aus und macht das was ich will:
For z = 5 To llastr 'durhläuft alle Zeilen ab Zeile 5
For s = 4 To ilasts 'durchläuft alle Spalten ab Spalte D
If wksdata.Cells(z, s).Value "" Then
'zeile kopieren
wksDest.Cells(llastdest, 1).Value = wksdata.Cells(z, 2).Value 'hier Spalte B
wksDest.Cells(llastdest, 2).Value = wksdata.Cells(z, 3).Value 'hier Spalte C
wksDest.Cells(llastdest, 3).Value = wksdata.Cells(z, s).Value 'hier die Spalte mit der Zahl
wksDest.Cells(llastdest, 4).Value = wksdata.Cells(1, 1).Value
wksDest.Cells(llastdest, 5).Value = wksdata.Cells(1, 2).Value
wksDest.Cells(llastdest, 6).Value = wksdata.Cells(1, 3).Value
llastdest = llastdest + 1
End If
Next s
Next z
End Sub
Vielen Dank!!
Allerdings hätte ich noch eine Frage: Ich habe mehrere solche Files mit den Reitern Project_and_activity_list bzw. Hours, die alle in demselben Ordner liegen. Jetzt würde ich gerne das Makro über alle diese Files laufen lassen. Daraus soll dann eine Art Übersichtsblatt wie gerade die Tabelle1 darstellt entstehen. Dieses Übersichtsblatt soll aber ein extra File sein.
Ist das auch möglich?
Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 14:54:48
Zeile
Hallo arek,
ja auch das ist möglich, aber du kommst so langsam vom 1/100 ins 1/1000
Ab jetzt kosten Erweiterungen Geld ;-)
Probier das mal
https://www.herber.de/bbs/user/116581.xlsm
Gruß
yummi
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 15:07:47
Zeile
Hi yummi,
danke nochmals für die Antwort!! Das ist wirklich klasse von dir...
Eine Frage zu deinem Code: Wo muss man hier genau den Pfad eingeben?
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 15:26:54
Zeile
Hallo arek,
den wählst Du im open File Dialog aus, während dein Makro läuft. Dort wählst Du auch aus, welche Dateien du öffnen willst, es müssen nciht alle Dateien im Ordner sein und sollte mindestens eine sein.
Ansonsten, wen ndu alle in einem festen Pfad haben willst musst du statt dessen das drum bauen:

Dim Pfad As String, Dateiname As String, iRow As Long
Pfad = "C:\Eigene Dateien\"
Dateiname = Dir(Pfad & "*.xls")
Do While Dateiname  ""
Set wkbSource = Workbooks.Open Filename:=Pfad & Dateiname
Set wksSource = wkbSource.Sheets("Hours")
jetzt der Teil den Du schon hast
bis dahin wo das mit dem nothing kommt
dann
Workbooks(Dateiname).Close false
Dateiname = Dir()
Loop
Axo wkbSource hatte ich glaube ich bei dir wkbDest genannt, was aber namenstechnisch verwirren  _
würde.
Falls Du es also so heben willst, dann kriegst Du das jetzt bestimmt selber hin oder?
Gruß
yummi

Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 15:48:16
Zeile
Hi yummi,
zunächst einmal nochmal vielen Dank für deine Antworten! Ich hätte noch eine Frage (wirklich die Letzte!!)...Ich habe es jetzt mit einem Pfad probiert, unter dem die gleichen Listen alle liegen, allerdings kommt bei mir immer eine Fehlermeldung. Könntest du dir das nochmal ein letztes Mal anschauen? Das wäre wirklich super!!
Hier wäre die Datei:
https://www.herber.de/bbs/user/116582.xlsm
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 16:11:41
Zeile
Hallo arek,
da ist einiges durcheinander gekommen, ich hab das mal gerade gezogen, so dass kein syntaxfehler mehr drin ist. Aber ich glaube, das mit dem Desktop im Pfad wird so nicht gehen, da der Pfad zum Desktop vile länger ist, da fehlt noch Benutzer und anderer Kram. Meine Empfehlung hier, leg den Ordner mit deinen Dateien, irgendwo direkt auf z.B. C:\MeineDaten\Wasauchimmer\
Meine Empfehlung für dich, setz dir einen Breakpoint am Anfang des Makros und step dann mit F8 einzeln durch, schau dir den Wert der einzelnen Variablen an und versuch es zu verstehen.
Viel Erfolg
https://www.herber.de/bbs/user/116585.xlsm
Gruß
yummi
Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 16:30:43
Zeile
Hi yummi,
nochmals danke für deine Korrektur!! Wie meinst du das mit dem Pfad genau? ich habe jetzt deine Korrekturen übernommen, doch leider passiert beim Drücken des Buttons überhaupt nichts. Meinst du es liegt an dem angegebenen Pfad?
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 16:45:35
Zeile
Hallo arek,
ich denke ja oder daran dass keine Werte in deinen Quelldateien angegeben sind.
Deswegen habe ich gesagt, setz einen breakpoint und step mit F8 im debugger schritt für schritt durch. Da kannst du dann auch sehen, was mit deinem Pfad passiert.
öffne mal den debugger, geh in die Zeile Dateiname = Dir(Pfad & "*.xls") drück F8 und schau mal ob in Dateiname ein Wert "" drin steht. Einfach mit der Maus drüberhalten oder die Varibale ins Überwachungsfenster ziehen.
Die While Schleife wird ja nur durchgeführt wenn in Dateiname was drin steht. WEnn der Pfad nicht existiert oder keine xls Dateien dort vorhanden sind, dann bleibt Dateiname leer und nix passiert.
Ich bin dan nerstmal offline
Gruß
yummi
Versuch mit einem anderen Pfad,
Anzeige
AW: Automatisches Erstellen von Zeile in anderem Reite
27.09.2017 16:54:39
Zeile
Hi yummi,
danke nochmals für deine Hilfe! Leider ist der Dateiname = ""...Ich versuchs später nochmal mit nem anderen Pfad! Danke vorerstmal du hast mir sehr geholfen!
AW: Automatisches Erstellen von Zeile in anderem Reite
28.09.2017 10:03:53
Zeile
Hallo nochmal,
vielen Dank für die Hilfe gestern! Ich konnte nun auch das Problem mit dem Pfad lösen.
Allerdings ist es mit dem Code von oben so, dass es die jeweiligen Einträge, die in dem Ordner in dem verschiedenen Files vorhanden sind, nicht untereinander abgebildet werden, sondern sich einfach überschreiben. Am Ende stehen dann nur die Einträge des letzten Files in meiner Übersicht. Ich möchte aber gerne, dass alle vorhanden sind.
Was muss ich da am bestehenden Code verändern?
Viele Grüße
AW: Automatisches Erstellen von Zeile in anderem Reite
28.09.2017 13:18:34
Zeile
Hallo arek,
schau beim debuggen mal auf die zeile
llastdest = BestimmeletzteZeile(wksDest, 1) +1
du bestimmt wohin geschrieben werden soll, allerdings momentan in Spalte A (1)
Ich hab nochmal nachgeseehn und in Spalte A schreibst Du nie was rein, daher findet die Funktion nicht dieen wirklich letzte Zeile. In Spalte H schreibst Du ja immer ein H rein, von daher würde ich diese Spalte empfehlen zum prüfen. Mach also aus der 1 mal eine 8, dann sollte es funzen
Gruß
yummi
AW: Automatisches Erstellen von Zeile in anderem Reite
28.09.2017 14:53:59
Zeile
Hi yummi,
super vielen Dank!! Das funktioniert.
Jetzt hätte ich noch eine Frage: Wenn keine PAS_nummer vorhanden ist, d.h. das Feld leer ist oder in dem Feld "not required" steht (Spalte C), soll das ganze Makro nicht durchlaufen, sondern nur wenn tatsächlich eine Nummer drinsteht. Lässt sich das realisieren? Und wenn ja wie?
AW: Automatisches Erstellen von Zeile in anderem Reite
28.09.2017 15:02:13
Zeile
Hallo Arek
wo du die Daten kopiert werden, die if Abfrage if wksdata.cells(Cells(z, s).value "" then erweitern
if wksdata.cells(Cells(z, s).value "" and wksData.cells(z,3).value "" and wksData.cells(z,3).value "not required" then
Gruß
yummi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige