Skapa knappar i Excel
5 svar · 2 253 visningar · startad av vasy
Om du tar fram "Visa-Verktygsfält-Kontroller" så kan du lägga in en ActiveX kontroller i ditt blad.
Lägg in en knapp så att den ryms på den rad som artikeln du vill kunna flytta ligger på (eller åtminstånde så att det övre vänstra hörnet ligger på raden)
Högerklicka->kommandoknappsobjekt->Redigera så kan du ändra namnet
Högerklicka->Visa Kod och skriv in någonting i stil med:
Private Sub CommandButton1_Click()
Dim rMål As Variant
Set rMål = Sheets("Blad3").Range("A1").End(xlDown).Offset(1, 0)
CommandButton1.TopLeftCell.EntireRow.Cut (rMål)
End Sub
Eventuellt kan du ersätta
CommandButton1.TopLeftCell.EntireRow
Med en fast adress till raden, typ:
Sheets("Blad1").Range("1:1")
Hursomhelst. Det här kommer att lämna en jädrans massa meningslösa knappar efter sig. Jag skulle rekomendera att du istället lägger en knapp högst upp på sidan och låter den aktiva raden bestämma istället för knappens position. Typ
Private Sub CommandButton1_Click()
Dim rMål As Variant
Set rMål = Sheets("Blad3").Range("A1").End(xlDown).Offset(1, 0)
Selection.EntireRow.Cut (rMål)
End Sub
Eller, om du vill ta bort den gamla raden också
Private Sub CommandButton1_Click()
Dim rMål As Variant
Set rMål = Sheets("Blad3").Range("A1").End(xlDown).Offset(1, 0)
Selection.EntireRow.Cut (rMål)
Selection.EntireRow.Delete Shift:=xlUp
End Sub
Hej
Tackar. Jag kör en engelsk excel, kan jag skriva samma kod, eller måste jag köra annan kod då?
vasy skrev:
Hej
Tackar. Jag kör en engelsk excel, kan jag skriva samma kod, eller måste jag köra annan kod då?
Ja, för säkerhets skull kan du ta bort å i variabelnamnet rMål. T.ex till rMal eller rTarget
Range("A1")
Visar den vad man vill flytta eller vart man vill flytta?
Eftersom jag kommer att flytta A6,B6 och C6 från Sheet1. Måste jag då ange samma värde i range??
vasy skrev:
Range("A1")
Visar den vad man vill flytta eller vart man vill flytta?
Vi kan ta enklast möjliga kod för att visa hur det fungerar
VadDuVillFlytta.cut (VarDuVillFlytta)
Det som står före .Cut är alltså adressen du vill flytta från och det som står i parantesen efter är adressen dit du vill flytta
Eller, om vi pratar om enklast möjliga kod för att kopiera A6-C6
Private Sub CommandButton1_Click()
Sheets("Sheet1").Range("A6:C6").Cut (Sheets("Sheet3").Range("A6:C6"))
End Sub
Adressen anges alltså som:
Sheets("Sheet1").Range("A6:C6").
"Sheet1" och "A6:C6" är namnet på bladet och de celler (range) du avser
Problemet med ovastående kod är att den bara fungera om du vet exakt Vad du vill flytta och exakt vart du vill flytta. Jag gjorde det lite mer kompicerat för att tillåta dig att "fylla på" en lista på blad3 och alltid lägga det du kopierar längst ner i listan.
Den första raden (Set rMål...) används alltså för att försöka hitta den första lediga raden i blad3
Set rMål = Kopplar variabeln/objektet rMål till en viss cell
Delarna i högerledet betyder i princip:
Sheets("Blad3").Range("A1") = Gå till blad3 och cellen A1 ("blad3" och "A1" är namnet på bladet och cellen. Ändra till lämpligt, t.ex "Sheet3")
... .End(xlDown)= Samma sak som att trycka CTRL+Nerpil när du står i ett blad. Dvs den hittar den sista ifyllda cellen i kolumnA
... .Offset(1, 0) = gå ner ytterligare en rad (dvs den första tomma cellen i A-kolumnen)
Den här koden fungerar bara om minst 2 rader redan är ifyllda. Du kanske vill börja nerifrån istället. Typ
Set rMål = Sheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0)
Det är samma sak som att ställa sig längst ner i kolumnA, trycka CTRL+Upppil och sedan gå ner en rad
Sedan används Rmål för att ange var raden skall kopieras i ... .cut ()
I de exempel jag angav så klipper vi ut hela raden (EntireRow) och klistrar in den. Rmål anger var det skall "börja" klistras in. Rmål är visserligen bara en cell i A-kolumnen. Men resten av raden kilistras automatiskt in till höger om den cellen.
Ähhh. Lek lite med koden och se vad den gör. Det är ju bara du som vet exakt vad det är du vill göra. Men det här borde vara en startpunkt i alla fall.