Hallo Leute und Experten! Gleich zum Thema, ich möchte gerne die werte aus dem Tabellenblatt Spiele von I9-20;M9-20 in das Statblatt mittels VBA übertragen. Wie ist dies möglich. Bitte um einen hinweis! Die werte aus der Spalte M sollten dann in die nächste freie Spalte im Tabellenblatt Startbaltt übertragen werden genauso ist es mit Pumpen und Strafen. Kranz und Alle Neune müssen anders behandelt werden. Aber erste einmal wie geht das in VBA. Stehe wie immer auf dem....
(13.05.2014, 23:23)michel34497 schrieb: Die werte aus der Spalte M sollten dann in die nächste freie Spalte im Tabellenblatt Startbaltt übertragen werden genauso ist es mit Pumpen und Strafen. Kranz und Alle Neune müssen anders behandelt werden. Aber erste einmal wie geht das in VBA.
Welche freie Spalte ist damit gemeint? Spalte F und folgende oder ab Spalte AK?
Sub prcUebernahme() Dim lngLetzteZeile As Long, lngC As Long, lngGefuellt As Long Dim rngName As Range
With Worksheets("Spiele") lngLetzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row For lngC = 9 To lngLetzteZeile Set rngName = Worksheets("Startblatt").Columns(2).Find(.Cells(lngC, 1), lookat:=xlWhole, LookIn:=xlValues) If Not rngName Is Nothing Then lngGefuellt = Application.WorksheetFunction.Count(rngName.Offset(, 4).Resize(, 15)) If lngGefuellt = 15 Then MsgBox "Alle Spalten vom " & rngName.Value & " sind gefuellt!", vbInformation, "Achtung!" Else rngName.Offset(, 4 + lngGefuellt).Value = .Cells(lngC, 13).Value rngName.Offset(, 19).Value = .Cells(lngC, 12).Value rngName.Offset(, 21).Value = .Cells(lngC, 9).Value End If End If Next lngC End With Set rngName = Nothing End Sub
Dir ist aber schon klar, das die Formeln in der Spalte U und W vom Makro überschrieben werden?
Habe eben mal getestet, sah am anfang gut aus. Dann ist mir aber aufgefallen das der Code die werte immer in eine freie Celle schreibt. Dies dürfte er so nicht machen. Als beispiel: steht im Startblatt hinter einem Namen ab Spalte F schon ein wert so sollte er die nächste Spalte nehmem und dort die werte eintragen. Also werte immer Spalten weis eintragen.
Das die Spalten U und W vom Makro überschrieben werden hab ich nicht dran gedacht :20:. Diese Spalten werden ja über das Tabellenblatt Daten gefüllt. Besteht die möglichkeit die Pumpen und Strafen dort einzutragen? Also die Werte aus Spiele in Daten aufzu addieren.
(15.05.2014, 22:00)michel34497 schrieb: Habe eben mal getestet, sah am anfang gut aus. Dann ist mir aber aufgefallen das der Code die werte immer in eine freie Celle schreibt. Dies dürfte er so nicht machen. Als beispiel: steht im Startblatt hinter einem Namen ab Spalte F schon ein wert so sollte er die nächste Spalte nehmem und dort die werte eintragen. Also werte immer Spalten weis eintragen.
Und wenn ein Mitspieler mal drei Spiele hintereinander nicht da war, ist eine Lücke drin? Und bei einem Gast der nur ganz selten kommt, was soll da gemacht werden?
(15.05.2014, 22:00)michel34497 schrieb: Das die Spalten U und W vom Makro überschrieben werden hab ich nicht dran gedacht :20:. Diese Spalten werden ja über das Tabellenblatt Daten gefüllt. Besteht die möglichkeit die Pumpen und Strafen dort einzutragen? Also die Werte aus Spiele in Daten aufzu addieren.
Im Tabellenblatt Daten stehen keine Namen, wen soll man es dann zu ordnen?
Deine frage: Und wenn ein Mitspieler mal drei Spiele hintereinander nicht da war, ist eine Lücke drin? Und bei einem Gast der nur ganz selten kommt, was soll da gemacht werden?
Das Startblatt wird jedesmal an dem Abend wo gespielt ersteinmal geleert. Wir haben leider zwei Spiele wo es sein kann das ein Spieler Nichts eingetragen bekommt. Dann ist bei dem Spieler eine Lücke drin.
Muss leider erstmal Schluss machen die Arbeit ruft. Melde mich nacher nochmal für mehr details, aber vieleicht hilft ja diese kleine Info schon.
habe es mal umgeschrieben (das mit den Strafen und usw auskommentiert).
Code:
Sub prcUebernahme() Dim lngLetzteZeile As Long, lngC As Long Dim rngName As Range, rngGefuellt As Range
With Worksheets("Spiele") lngLetzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row Set rngGefuellt = Worksheets("Startblatt").Range("F5:T22").Find(What:="*", lookat:=xlWhole, LookIn:=xlValues, _ searchorder:=xlByColumns, SearchDirection:=xlPrevious) For lngC = 9 To lngLetzteZeile Set rngName = Worksheets("Startblatt").Columns(2).Find(.Cells(lngC, 1), lookat:=xlWhole, LookIn:=xlValues, searchorder:=xlByRows) If Not rngName Is Nothing Then If Not rngGefuellt Is Nothing Then If rngGefuellt.Column = 20 Then MsgBox "Alle Spalten sind gefüllt!", vbInformation: Exit For Worksheets("Startblatt").Cells(rngName.Row, rngGefuellt.Column + 1).Value = .Cells(lngC, 13).Value ' rngName.Offset(, 19).Value = .Cells(lngC, 12).Value ' rngName.Offset(, 21).Value = .Cells(lngC, 9).Value Else Worksheets("Startblatt").Cells(rngName.Row, 6).Value = .Cells(lngC, 13).Value ' rngName.Offset(, 19).Value = .Cells(lngC, 12).Value ' rngName.Offset(, 21).Value = .Cells(lngC, 9).Value End If End If Next lngC End With Set rngName = Nothing Set rngGefuellt = Nothing End Sub
Hallo Stefan! Hast du das mit meiner Tabelle mal getestet? Ich habe grade getstet und mir ist aufgefallen das nicht alle werte aus Tabellenblatt Spiele der Spalte M in das TabellenBlatt Startblatt ab Spalte F übertragen werden. Ansonsten ist es das was ich haben wollte.
(16.05.2014, 21:41)michel34497 schrieb: Hast du das mit meiner Tabelle mal getestet? Ich habe grade getstet und mir ist aufgefallen das nicht alle werte aus Tabellenblatt Spiele der Spalte M in das TabellenBlatt Startblatt ab Spalte F übertragen werden. Ansonsten ist es das was ich haben wollte.
klar habe ich das getestet. Werde doch bitte konkreter, welche Werte nicht übertragen werden, bei mir funktioniert alles (außer die Strafen, Pumpen usw. aber das hatte ich ja auskommentiert).