Sursill Posted May 4, 2019 Share Posted May 4, 2019 Hej, Jag behöver hjälp med en kod visual basic i excel. Det jag vill att macrot ska göra är att klippa ut en rad i blad 1 (tomraden ska deletas) och klistra in den i blad 2 på första lediga rad. Tacksam för hjälp Link to comment Share on other sites More sharing options...
Monshi Posted May 4, 2019 Share Posted May 4, 2019 Dim rnSource As Range Dim rnTarget As Range Set rnSource = Blad1.Rows(3) Set rnTarget = Blad2.Cells(1, 1).End(xlDown).Offset(1) rnSource.EntireRow.Copy rnTarget rnSource.EntireRow.Delete Shift:=xlUp Hur man hittar första tomma rad beror lite på hur dina data ser ut. I detta fall finns det värden i A1 och nedåt, kontinuerligt. xlDown är samma som CTRL+pil ned på tangentbordet. Link to comment Share on other sites More sharing options...
Sursill Posted May 4, 2019 Author Share Posted May 4, 2019 Tack! Värden finns i A1 kontinuerligt. Jag provade koden, men den fastnar på raden: Set rnTarget = Blad2.Cells(1, 1).End(xlDown).Offset(1). Sub flyttarad() Dim rnSource As Range Dim rnTarget As Range Set rnSource = Blad1.Rows(3) Set rnTarget = Blad2.Cells(1, 1).End(xlDown).Offset(1) rnSource.EntireRow.Copy rnTarget rnSource.EntireRow.Delete Shift:=xlUp End Sub Link to comment Share on other sites More sharing options...
Monshi Posted May 5, 2019 Share Posted May 5, 2019 Blad1 är namnet, VBA-namnet på bladet du hämtar data på. Blad2 är VBA-namnet på målbladet. Denna referens kan du bygga upp på fler sätt: Set rnSource = Worksheets("MittBladNamn").Rows(3) exempelvis. Troligtvis det som den fastnat på. Link to comment Share on other sites More sharing options...
Sursill Posted May 5, 2019 Author Share Posted May 5, 2019 För enkelhetens skull har jag bara ett test-ark med kolumn A ifylld med en sifferserie på Blad1. Blad2 är tom. Så här blir det när jag testar koden: Link to comment Share on other sites More sharing options...
Monshi Posted May 5, 2019 Share Posted May 5, 2019 Om blad2 är tomt hamnar vi på rad 1048576 och nedanför den finns det givetvis inte en till så skriv in en första rad, en rubrik, och det kommer att fungera. Men vi kan vända på det: Set rnTarget = Blad2.Cells(1048576 , 1).End(xlUp).Offset(1) If (Not rnTarget .Value = "") Then Set rnTarget = rnTarget .Offset(1) End If Fast rad 1048576 finns inte äldre version av excel så kanske minska den siffran som inte alla som ska använda arket har nya versionen av Excel. Link to comment Share on other sites More sharing options...
Sursill Posted May 6, 2019 Author Share Posted May 6, 2019 Tack för hjälpen. Men det funkar inte ändå, vilket gör mig sömnlös. Jag har två koder som fungerar klockrent var och en för sig. För att hitta nästa tomma rad (förutom msgbox): Sub LastFreeRow() Dim LastRow As Long With ActiveSheet LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 End With MsgBox LastRow End Sub Samt Cut & Paste: Sub Flyttarad() Selection.Cut Sheets("Blad2").Select Rows("1:1").Select ActiveSheet.Paste Sheets("Blad1").Select Selection.Delete Shift:=xlUp Range("I21").Select End Sub Link to comment Share on other sites More sharing options...
Solution Monshi Posted May 6, 2019 Solution Share Posted May 6, 2019 Se bifogad bok Zippad eftersom den innehåller VBA-kod och Eforum nekar uppladdning av de filerna. Se om du förstår hur denna fungerar och anpassa den efter dina behov. det som behövs är kanske framförallt att hitta raden som ska flyttas. Kan göra om koden så att den frågar efter en rad, att en cell i den ska markeras. flyttarad.zip Mikael63 1 Link to comment Share on other sites More sharing options...
Sursill Posted May 7, 2019 Author Share Posted May 7, 2019 Stort tack! Nu funkar det precis som jag vill! Link to comment Share on other sites More sharing options...
Sursill Posted May 18, 2019 Author Share Posted May 18, 2019 Hejsan! Det blev ändå lite fel. Men jag ändrade till "Set rnSource = Selection" istället för "Set rnSource = Blad1.Rows(3)" Så nu verkar koden funka helt. Tack för att du ledde mig på rätt spår. Link to comment Share on other sites More sharing options...
Recommended Posts