1.4k Aufrufe
Gefragt in Tabellenkalkulation von jonesm Mitglied (191 Punkte)
Hallo,
ich möchte aus einem Formular, welches der Benutzer ausfüllt, die Eingaben per Makro (Schaltfläche) in eine fortlaufende Tabelle übertragen.

a) Dazu soll das Makro in der ersten freien Zeile bestimmte Zellen übertragen, z.B.
Zelle D3 in die Spalte B
Zelle J3 in die Spalte C
Zelle K3 in die Spalte F

b) In der Tabelle soll in die Spalte A als Ordnungsmerkmal eine laufende Nummer eingetragen werden. Dazu soll die Nummer der vorherigen Zeile um eins hochgezählt werden. Diese Nummer soll dann wiederum in die Zelle A1 in das Formular übertragen werden. Um Mehrfacheintragungen zu vermeiden, soll nur eine neue Zeile in der Tabelle angelegt werden, wenn A1 noch keine Nummer steht. Wenn bereits eine Nummer vergeben wurde (die dann in A1 steht), sollen nur die restlichen Zellen aktualisiert werden (keine neue Zeile anlegen).

Soooo, ich hoffe mir kann jemand helfen!

Vielen Dank schon mal im voraus.

Viele Grüße
Thomas

6 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Thomas,


Sub Uebertragen()
Dim lngLetzte As Long
If Range("A1") = "" Then
With Worksheets("Tabelle2")
lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Cells(lngLetzte + 1, 1) = Application.Max(.Columns(1)) + 1
.Cells(lngLetzte + 1, 2) = Range("D3")
.Cells(lngLetzte + 1, 3) = Range("J3")
.Cells(lngLetzte + 1, 6) = Range("K3")
Range("A1") = .Cells(lngLetzte + 1, 1)
End With
End If
End Sub


Bis später,
Karin
0 Punkte
Beantwortet von jonesm Mitglied (191 Punkte)
Hallo Karin,

das sieht super aus! Das löst mein Problem schon ein ganzes Stück!
Erst einmal vielen Dank.

Geh es auch, dass wenn bereits die Nummer vergeben wurde (in A1) beim erneuten Aufruf des Makros die restlichen Zellen (die entsprechende Zeile in der Tabelle) aktualisiert werden?

Das wäre super.

Vielen Dank und Grüße
Thomas
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Thomas,

in dem Fall muss zuerst geprüft werden, ob die Zahl in Spalte A Tabelle2 vorhanden ist - versuche es so:

Sub Uebertragen()
Dim lngZeile As Long
Dim rngZelle As Range
If Range("A1") <> "" Then
With Worksheets("Tabelle2")
' in Spalte A suchen
Set rngZelle = .Columns(1).Find(Range("A1").Value, lookat:=xlWhole)
' Inhalt aus A1 ist in Spalte A vorhanden
If Not rngZelle Is Nothing Then
' gefundene Zeile
lngZeile = rngZelle.Row
' Inhalt aus A1 ist in Spalte A nicht vorhanden
Else
' nächste freie Zeile
lngZeile = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
.Cells(lngZeile, 1) = Application.Max(.Columns(1)) + 1
Range("A1") = .Cells(lngZeile, 1)
End If
.Cells(lngZeile, 2) = Range("D3")
.Cells(lngZeile, 3) = Range("J3")
.Cells(lngZeile, 6) = Range("K3")
Set rngZelle = Nothing
End With
End If
End Sub


Bis später,
Karin
0 Punkte
Beantwortet von jonesm Mitglied (191 Punkte)
Funktioniert perfekt!

Kann man die beiden Makros nicht in ein gemeinsames Makro zusammenführen? Dann brauche ich die ganzen Zellen, welche in die Tabelle eingetragen werden, nicht zwei mal anzupassen.

Würde es auch gehen, dass ich den Zähler - fortlaufende Zahl - mit der Jahreszahl ergänze? z.B.
2016-001
2016-002
2016-003
...

Viele Grüße
Thomas
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Thomas,

welche beiden Makros? Das zweite ist doch dasselbe wie das erste, nur um die genannte Püfung erweitert.

Wonach gesucht wird, spielt keine Rolle, solange in der Suchspalte die Daten auch in der Form Jahr-Zahl vorliegen und der Suchbegriff in A1 ebenfalls die Form Jahr-Zahl hat - es wird sozusagen nach 100%ig übereinstimmenden Daten gesucht.

Bis später,
Karin
0 Punkte
Beantwortet von jonesm Mitglied (191 Punkte)
OK, nur das zweite Makro hatte im ersten step nicht funktioniert. Ich komme aber erst nächste Woche wieder dazu mich damit zu beschäftigen.

Vielen Dank schon einmal und ein schönes WE.

Thomas
...