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

Excel Makro - Input till vilken rad som ska kopieras


Raez8

Rekommendera Poster

Hej! Jag försöker göra ett makro som ska kopiera vissa celler från ett blad till ett annat. Innan det kopieras in till det nya bladet flyttas tidigare data en rad nedåt så att den nya får plats. Jag har lyckats med det mesta förutom att det just nu bara är cellerna på rad 9 som kopieras. Jag har lagt in ett inputmeddelande som frågar vilken rad de ska kopieras ifrån, men kopplingen till att just de kopieras vet jag inte hur jag gör.

 

Någon som har en bra lösning? Kopierat koden, möjligt att det även ligger lite "skräp" med som inte behövs.

 

 

Sub Super2()
' Flyttar all data en rad nedåt
   Sheets("Planering").Select
   Range("A5:L300").Select
   Selection.Cut
   Range("A6").Select
   ActiveSheet.Paste
   Sheets("Produktregister").Select
' Skriver in vilken rad man vill kopiera
   Dim intTal As Integer
   intTal = InputBox _
   ("Ange vilket nummer på aktuell rad.", "Skriv in ett tal", 1)
   MsgBox intTal
' Just nu kopieras bara område från rad 9, ska vara valbar med radnummer från ovan    	
Range("A9:E9,G9:K9").Select
   Range("G9").Activate
   Selection.copy
   Sheets("Planering").Select
   Range("B5").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
' Lägger till en lista
   Range("L5").Select
   Application.CutCopyMode = False
   With Selection.Validation
       .Delete
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
       xlBetween, Formula1:="=Manad"
       .IgnoreBlank = True
       .InCellDropdown = True
       .InputTitle = "Välj månad"
       .ErrorTitle = ""
       .InputMessage = ""
       .ErrorMessage = ""
       .ShowInput = True
       .ShowError = True
   End With
End Sub

 

Eller om det går att lösa på något helt annat sätt..

Länk till kommentar
Dela på andra webbplatser

Hej,

 

Titta gärna igenom Monshis "Riktlinjer för bra VBA-kod" angående användningen av Select-satser.

 

Detta sagt går det att effektivisera din kod en del:

Sub DataFlytt()
Dim intTal As Integer
With Sheets("Planering")
   	'Infogar en ny rad i toppen på dataområdet med bibehållen formatering.
   	'Dvs, valideringslistan i kolumn L läggs till automatiskt.
   	.Range("A5:L5").Insert Shift:=xlShiftDown, CopyOrigin:=xlFormatFromRightOrBelow
   	'Hämtar ny data på angiven rad
   	Sheets("Produktregister").Activate 'För att visa bladet ifråga.
   	intTal = InputBox("Ange nummer på aktuell rad.", "Skriv in ett tal", 1)
   	Union(Range(Cells(intTal, 1), Cells(intTal, 5)), _
           	Range(Cells(intTal, 7), Cells(intTal, 11))).Copy
   	.Range("B5").PasteSpecial Paste:=xlPasteValues
   	Application.CutCopyMode = False
End With
End Sub

När det gäller valet av rad att kopiera in i tabellen fungerar ett inmatningsformulär bra, så länge det inte finns något annat bra sätt att räkna ut vilken rad som ska kopieras.

 

Hälsningar

/Johan

Länk till kommentar
Dela på andra webbplatser

Hej! Jag tackar så mycket för hjälpen, det fungerar helt korrekt. Jag är ganska ny inom VBA så kan inte så mycket än, men riktig fint slimmad kod får jag säga. Ska läsa igenom det du hänvisade till!

 

Tackar!

/Tobbe

Länk till kommentar
Dela på andra webbplatser

Jag upptäckte ett litet problem då den nya raden infogas i början av koden. Jag har formler som summerar listorna som uppkommer på lite olika sätt. Och när en ny rad uppkommer så hoppar sum-rangen ner ett hack i formeln (ex. sum(G5:G10) blir sum(G6:G11). Den nya raden exkluderas alltså i formeln.

 

Går det att lösa med ändringar i formeln eller kan makrot ändras?

 

/Tobbe

Länk till kommentar
Dela på andra webbplatser

Om du skriver om din formel som så den omsluter, med det menar jag att du skriver din summa som

=SUMMA(G3:G10)

När du sedan infogar en, eller flera, rader på rad fyra kommer detta leda till att formel även inkluderar dessa.

 

Alternativ, om nu inte det låter sig göras och du vill låsa den på rad fem får vi ta hjälp av FÖRSKJUTNING:

=SUMMA(FÖRSKJUTNING(A1;3;0;RAD()-4))

så länge du inte infogar en rad på rad 1 kommer denna att referera från A4 och ned till en rad ovanför där formeln står.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...