Hallo zusammen,
ich möchte gern in die immer gleichen zwei Zellen Werte eintragen, die nach Betätigung der Enter-Taste automatisch in die nächste freie Zeile einer bestehenden Liste auf dem gleichen Tabellenblatt übertragen werden. Z.B. sollen die eingetragenen Werte in den Zellen A1 und B1 zunächst in die Zellen A23 und B23 übertragen werden....beim nächsten Eintrag in A1 und B1 sollen die Werte dann in A24 und B24 übertragen werden usw. Nachdem die Werte aus den Zellen A1 und B1 mit " Enter" in Liste übertragen wurden, sollen die Zellen A1 und B1 wieder leer sein und für den nächsten Eintrag zur Verfügung stehen.
Also benötige ich so eine Art "Formularfeld".
Ist das möglich und wenn ja wie?
...Wenn es nur mit VBA möglich ist...bitte die Erklärung gaaaaanz langsam und Schritt für Schritt :)
Herzlichen Dank schon mal.
grainne
Hallo grainne,
mal 'ne blöde Frage. Wieso trägst du die Werte nicht gleich in die "richtigen" Zellen ein?
Hallo,
Rechtklick auf den Tabellenreiter > Code anzeigen.
In das rechte Codefenster kommt folgendes Makro:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B1" Then
If Target.Value <> "" And Range("A1").Value <> "" Then
On Error Resume Next
Application.EnableEvents = False
With Rows(Application.Max(10, Cells(Rows.Count, 1).End(xlUp).Row + 1))
.Cells(1).Value = Range("A1").Value
.Cells(2).Value = Range("B1").Value
End With
Range("A1:B1") = ""
Range("A1").Select
Application.EnableEvents = True
On Error GoTo 0
End If
End If
End Sub
Gruß Uwe
(12.08.2015, 23:12)WillWissen schrieb: [ -> ]Hallo grainne,
mal 'ne blöde Frage. Wieso trägst du die Werte nicht gleich in die "richtigen" Zellen ein?
...keine blöde Frage, sondern eine berechtigte...
Es gibt 3 Gründe:
1. Weil mir die scrollerei bis ans Ende der Tabelle zu nervig ist und ich im oberen Teil der Tabelle andere wichtige Infos habe (zu viele, um einfach die oberen Zeilen zu fixieren)
2. Weil es für andere Personen einfacher ist, wenn sie gleich sehen und wissen, wo sie was eintragen müssen.
3. Weil ich mit Excel gerne rumexperimentiere. Ich finde es klasse, was alles möglich ist. Also: Neugier und Interesse :)
LG
Andrea
(13.08.2015, 00:21)Kuwer schrieb: [ -> ]Hallo,
Rechtklick auf den Tabellenreiter > Code anzeigen.
In das rechte Codefenster kommt folgendes Makro:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B1" Then
If Target.Value <> "" And Range("A1").Value <> "" Then
On Error Resume Next
Application.EnableEvents = False
With Rows(Application.Max(10, Cells(Rows.Count, 1).End(xlUp).Row + 1))
.Cells(1).Value = Range("A1").Value
.Cells(2).Value = Range("B1").Value
End With
Range("A1:B1") = ""
Range("A1").Select
Application.EnableEvents = True
On Error GoTo 0
End If
End If
End Sub
Gruß Uwe
Hi Uwe,
super, hat geklappt! Ganz großes Dankeschön!!!
Aber da ich nunmal neugierig bin, habe ich versucht, den Code ein wenig nachzuvollziehen (mit Makros kenne ich mich leider noch gar nicht aus) und konnte sowohl die Eingabefelder (was ja nun nicht weiter schwer war zu erkennen^^) und auch die Reihe der "Übertragungsfelder" ändern. Nur finden sich die Übertragungsfelder immer in Spalte A und B wieder. Welcher Teil des Codes ist dafür verantwortlich?
Bedeutend ist es nicht für mein Problem, aber ich würd's halt gern nachvollziehen. Also, wenn Du noch mal Lust und Zeit haben solltest zu antworten, dann gerne :)
Hier meine Änderungen:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "D19" Then
If Target.Value <> "" And Range("C19").Value <> "" Then
On Error Resume Next
Application.EnableEvents = False
With Rows(Application.Max(21, Cells(Rows.Count, 1).End(xlUp).Row + 1))
.Cells(1).Value = Range("C19").Value
.Cells(2).Value = Range("D19").Value
End With
Range("C19:D19") = ""
Range("C19").Select
Application.EnableEvents = True
On Error GoTo 0
End If
End If
End Sub
Nochmals herzlichen Dank für Deine Mühe!
LG
grainne
Hallo Andrea,
wenn es um die Spalten C (= 3. Spalte) und D (= 4. Spalte) geht, so (rot gekennzeichnet):
With Rows(Application.Max(21, Cells(Rows.Count, 3).End(xlUp).Row + 1))
.Cells(3).Value = Range("C19").Value
.Cells(4).Value = Range("D19").Value
End With
Gruß Uwe
(13.08.2015, 18:41)Kuwer schrieb: [ -> ]Hallo Andrea,
wenn es um die Spalten C (= 3. Spalte) und D (= 4. Spalte) geht, so (rot gekennzeichnet):
With Rows(Application.Max(21, Cells(Rows.Count, 3).End(xlUp).Row + 1))
.Cells(3).Value = Range("C19").Value
.Cells(4).Value = Range("D19").Value
End With
Gruß Uwe
Wunderbar, herzlichen Dank!
Gruß
Andrea