Excel VBA - Nach kopieren anderen Zelleninhalt "zurückwerfen"?

2 Antworten

Habe ich so richtig verstanden:
Du hast eine Formularseite (als Etikett formatiert):

Bild zum Beitrag

Und eine Liste, in der Zeile/Spalte vertauscht sind:

Bild zum Beitrag

Ich würde Laden und Speichern mit 2 Buttons und 2 Makros trennen. Der Code:
Sub speichern()

  On Error Resume Next 'Fehler ignorieren

  Nummer = Sheets("Formular").Range("B1")

  n = 0: n = Sheets("Liste").Range("A:Z").Find(Nummer).Row 'sucht die Nummer

  'wenn sie gefunden wird, wird der Datensatz überschrieben,

  'falls sie nicht gefunden wird, wird der Datensatz in die erste freie Zeile geschrieben:

  If n = 0 Then n = Sheets("Liste").Cells.SpecialCells(xlLastCell).Row + 1

  For Zeile = 1 To 4

    Sheets("Liste").Cells(n, Zeile) = Sheets("Formular").Cells(Zeile, 2)

  Next Zeile

End Sub

Sub laden()

  On Error Resume Next 'Fehler ignorieren

  Nummer = Sheets("Formular").Range("B1")

  n = 0: n = Sheets("Liste").Range("A:Z").Find(Nummer).Row 'sucht die Nummer

  If n = 0 Then MsgBox ("Nummer " & Nummer & "wurde nicht gefunden"): End

  For Zeile = 1 To 4

    Sheets("Formular").Cells(Zeile, 2) = Sheets("Liste").Cells(n, Zeile)

  Next Zeile

End Sub

Woher ich das weiß:eigene Erfahrung – Faulheit >> Neugier >> Wissen
 - (Computer, Technik, Technologie)  - (Computer, Technik, Technologie)
GittiHapee 
Fragesteller
 01.10.2021, 08:43

Das geht leider so nicht. Es ist zwingend erforderlich, dass der Wert mit dem selben Makro eingefügt wird. Denn es hängen noch weitere Funktionen in der Tabelle, die sonst nicht mehr funktionieren würden.

Das Eingabeformular, dass gleichzeitig als Label gedruckt wird sieht so aus (gekürzte Fassung):

(von A4 + B4 bis A6 + B6)

Datum: 01.10.2021

KDNr: 123456

Name: Max Mustermann

Diese Daten werden in die Liste eingefügt von B5-D5 (mit jeder weiteren Eingabe entsprechend nach unten dann.

In der Liste ist in Spalte A die ReklaNr bereits vorgegeben, die dann nach dem Kopiervorgang zu dem neuen Eintrag gehört.

Diese ReklaNr. Muss dann in der ersten Mappe in Feld B10 eingefügt werden.

Ich benötige etwas in der Art: "Suche letzten Eintrag in "Liste" Spalte B und kopiere die Zelle links davon (also Spalte A) und füge diese in "Eingabe" Zelle B10 ein"

Leider weiss ich nicht wie das mit den Bildern hier einfügen geht :(

0
hannes1806  04.10.2021, 10:23
@GittiHapee

aha, dann probiere mal das:

Sub speichern()

  On Error Resume Next 'Fehler ignorieren

  For n = 1 To 99999 'suche in der Liste die 1. freie Zeile

    If Sheets("Liste").Cells(n, 2) = 0 Then Exit For

  Next n

  For Zeile = 4 To 6 'schreibe die Formularzeilen 4-6 in die Listenspalten 2-4

    Sheets("Liste").Cells(n, Zeile - 2) = Sheets("Formular").Cells(Zeile, 2)

  Next Zeile

  'Hole die Nummer aus der Liste in das Formular

  Sheets("Formular").Range("B10") = Sheets("Liste").Cells(n, 1)

End Sub

0

Angenommen, die Variable in Deinem Makro, die die erste freie Zeile in "Liste" angibt heißt:
lngFreieZeile
Dann kannst Du mit:

Sheets("Eingaben").Range("B10") = Sheets("Liste").Cells(lngFreieZeile, 1).Value

den Wert aus der Spalte A nach B10 schreiben.

Habe ich Dich richtig verstanden? Hilft Dir das?

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
GittiHapee 
Fragesteller
 01.10.2021, 08:45

Der Code sieht so aus:
Sub transfer_werte()

  Dim rngDaten1  As Excel.Range
  Dim rngDaten2  As Excel.Range
  Set rngDaten1 = Worksheets("Eingaben").Range("B4:B9")
  Set rngDaten2 = Worksheets("Eingaben").Range("E4:E6")
   
  With Worksheets("Liste")
     With .Cells(.Rows.Count, 2).End(xlUp)
        .Offset(1, 0).Resize(rngDaten1.Columns.Count, rngDaten1.Rows.Count).Value = Application.Transpose(rngDaten1.Value)
    End With
  End With      
  With Worksheets("Liste")
     With .Cells(.Rows.Count, 8).End(xlUp)
        .Offset(1, 0).Resize(rngDaten2.Columns.Count, rngDaten2.Rows.Count).Value = Application.Transpose(rngDaten2.Value)
    End With
  End With
End Sub

Im Anschluß an diesen Kopiervorgang soll ein Code kommen, in der Art: "Suche letzten Eintrag in "Liste" Spalte B und kopiere die Zelle links davon (also aus Spalte A) und füge diese in "Eingabe" Zelle B10 ein"

0
Oubyi, UserMod Light  01.10.2021, 15:51
@GittiHapee

Ich versuche das mal als "Trockenübung", also ohne es in Excel auszuprobieren:


Sub transfer_werte()

  Dim rngDaten1  As Excel.Range
  Dim rngDaten2  As Excel.Range
  
  Dim lngFreieZeile '############
  
  Set rngDaten1 = Worksheets("Eingaben").Range("B4:B9")
  Set rngDaten2 = Worksheets("Eingaben").Range("E4:E6")
   
  With Worksheets("Liste")
     With .Cells(.Rows.Count, 2).End(xlUp)
     
     lngFreieZeile = .Row + 1  '###############
     
        .Offset(1, 0).Resize(rngDaten1.Columns.Count, rngDaten1.Rows.Count).Value = Application.Transpose(rngDaten1.Value)
    End With
  End With
  With Worksheets("Liste")
     With .Cells(.Rows.Count, 8).End(xlUp)
        .Offset(1, 0).Resize(rngDaten2.Columns.Count, rngDaten2.Rows.Count).Value = Application.Transpose(rngDaten2.Value)
    End With
  End With
  
  Sheets("Eingaben").Range("B10") = Sheets("Liste").Cells(lngFreieZeile, 1).Value  '##############

End Sub

Die drei Zeilen, die ich eingefügt habe, habe ich mit ### markiert.
Falls es mit der Zeile nicht genau hinhaut versuche mal das +1 wegzulassen oder auf +2 zu erhöhen.

1