Just nu i M3-nätverket
Gå till innehåll

Flytta rad med vb i excel


Sursill
 Share

Go to solution Solved by Monshi,

Rekommendera Poster

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

 

Länk till kommentar
Dela på andra webbplatser

    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.

 

Länk till kommentar
Dela på andra webbplatser

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

Länk till kommentar
Dela på andra webbplatser

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å.

 

Länk till kommentar
Dela på andra webbplatser

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:

 

image.png.a729330f572fa92f80a4dfc67d930a74.png

Länk till kommentar
Dela på andra webbplatser

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.

 

Länk till kommentar
Dela på andra webbplatser

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
 

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

  • Solution

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

  • Gilla 1
Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

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. 

 

 

Länk till kommentar
Dela på andra webbplatser

 Share

×
×
  • Skapa nytt...