"Formularfeld": automatisches Übertragen von Werten zweier feststehender Zellen in ne
#1
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
Top
#2
Hallo grainne,

mal 'ne blöde Frage. Wieso trägst du die Werte nicht gleich in die "richtigen" Zellen ein?
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#3
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
Top
#4
(13.08.2015, 00: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
Top
#5
(13.08.2015, 01: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
Top
#6
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
Top
#7
(13.08.2015, 19: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
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste