Frage von LadieX, 183

Zeile kopieren und einfügen mit VBA, aber wie?

Hallo, ich erstelle gerade eine Liste, in welcher mehrere Mitarbeiter (jeder hat eine Zeile für sich) mit farblichen Markierungen arbeiten.

Ich hätte gerne einen Code, mit dem ich die Zeilen wieder zurücksetzen kann. Dazu habe ich unter der Liste eine "Hilfszeile" eingefügt, welche dann einfach kopiert und in die Zeile für den entsprechenden Mitarbeiter eingefügt werden soll.

Mein Code sieht bisher so aus: 

Private Sub CommandButton1_Click()
 Application.EnableEvents = False
 If UserForm2.ComboBox1.Value = "" Then
  MsgBox "Bitte einen Mitarbeiter auswählen"
  Exit Sub
 End If
 For i = 2 To UP.Cells(Rows.Count, 1).End(xlUp).Row
  If UP.Cells(i, 1).Value = UserForm2.ComboBox1.Value Then
  Exit For
 Next
End Sub

Mein UserForm besteht also aus einem Button und einer ComboBox. Wird in der ComboBox der Name ausgewählt, soll mit

For i = 2 To UP.Cells(Rows.Count, 1).End(xlUp).Row
 If UP.Cells(i, 1).Value = UserForm2.ComboBox1.Value Then
 Exit For
Next

die Zeile für den Mitarbeiter gesucht werden.

Schätze, das sollte so funktionieren. Wie kopiere ich jetzt aber die Hilfszeile und füge sie in die Zeile des Mitarbeiters ein? Die Hilfszeile ist Zeile 8.

Danke schonmal im Voraus :)

Expertenantwort
von Oubyi, Community-Experte für Excel, 154

Ich weiß nicht was das UP in Deinem Code soll und woher es kommt, aber das kopieren sollte so klappen:

For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
   If Cells(i, 1).Value = UserForm2.ComboBox1.Value Then
      Cells(8, 1).EntireRow.Copy Cells(i, 1)
      Exit For
   End If
Next

[Wenn Du die Code-Funktion hier nutzt und die Zeilenumbrüche manuell setzt (SHIFT&ENTER) wie oben, wird Dein Code lesbarer und Dir wird eher geholfen.]

Kommentar von Suboptimierer ,

Ich habe mal einen Formatierungsvorschlag abgeschickt.

Kommentar von Ninombre ,

Das UP kommt daher: https://www.gutefrage.net/frage/wie-kann-ich-mit-die-farbe-eines-feldes-in-einer...

Damit wurde zumindest bei der anderen Fragestellung das Tabellenblatt ermittelt.

Kommentar von Ninombre ,

@LadieX: Bei dem Code von Oubyi einfach vor alle cells noch das UP (wenn diese Logik gebraucht wird), dann läuft das. Allerdings: In der Hilfsspalte muss auch der Name des Mitarbeiters stehen, sonst wird das auch überschrieben.

Notfalls: Das konkrete Feld einfach wieder mit dem Namen füllen, also noch
UP.Cells(i, 1).Value = UserForm2.ComboBox1.Value zum Schluss.

Kommentar von LadieX ,

Vielen Dank :)

Was schreibe ich denn jetzt noch nach dem Next?

Das Kopierte muss ja noch eingefügt werden...

Kommentar von Ninombre ,

Das steckt in dieser Zeile schon drin:
Cells(8, 1).EntireRow.Copy Cells(i, 1) 

Das Fettgedruckte ist das Ziel des Kopierens. Da die ganze Zeile kopiert wird beginnt das Einfügen in der ersten Spalte.

For i = 2 To UP.Cells(Rows.Count, 1).End(xlUp).Row
If UP.Cells(i, 1).Value = UserForm2.ComboBox1.Value Then
UP.Cells(8, 1).EntireRow.Copy UP.Cells(i, 1)
UP.Cells(i, 1).Value = UserForm2.ComboBox1.ValueExit For
End If
Next

(arr mit Webwasher und IE funktioniert hier gar nix mit der Formatierung. Kann es leider nicht als Code einfügen, d.h. musst Du die Zeilenumbrüche leider manuell machen)

Kommentar von LadieX ,

War auch eine blöde Frage, hab erst nicht alles gelesen, jetzt ist es mir auch klar geworden :)

Vielen lieben Dank für eure Hilfe, jetzt funktioniert alles :)

Expertenantwort
von Iamiam, Community-Experte für Excel, 106

Ich stimme Oubyis Vorschlag zu.

aber warum machst Du das über

UserForm2.ComboBox1  ?

reicht denn Variable = inputbox(...) nicht ?

Dann bräuchtest Du keine extra Userform dafür erstellen!

Kommentar von Iamiam ,

übrigens gibts auch copy --- ...entirerow.pastespecial(xlformats)

anstatt entirerow reicht es auch, die erste Zelle der Zeile anzusteuern.

Schau wegen der Syntax nochmal in die Hilfe, hab das auswendig formuliert!

Keine passende Antwort gefunden?

Fragen Sie die Community