webForumDet fria alternativet

Skapa knappar i Excel

5 svar · 2 253 visningar · startad av vasy

vasyMedlem sedan jan. 200717 inlägg
#1

Hej

Kan man göra detta på något lätt sätt.

På blad1 har jag Art.nr och Pris. Jag skulle vilja skapa en knapp brevid varje artikel som heter typ "Lägg till"

När man klickar på denna ska den då flytta över Art.nr och pris till Blad3

Tack på förhand

MindreVetandeMedlem sedan okt. 2005371 inlägg
#2

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
vasyMedlem sedan jan. 200717 inlägg
#3

Hej

Tackar. Jag kör en engelsk excel, kan jag skriva samma kod, eller måste jag köra annan kod då?

MindreVetandeMedlem sedan okt. 2005371 inlägg
#4

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

vasyMedlem sedan jan. 200717 inlägg
#5

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??

MindreVetandeMedlem sedan okt. 2005371 inlägg
#6

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.

138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)