---
title: "Skapa knappar i Excel"
type: "forum-thread"
url: "https://www.webforum.nu/amne/kontorsprogram/155506-skapa-knappar-i-excel"
topic: "Kontorsprogram"
topic_url: "https://www.webforum.nu/amne/kontorsprogram"
author: "vasy"
published: "2007-01-03T14:57:30.000Z"
updated: "2007-01-04T10:34:22.000Z"
replies: 5
views: 2278
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/kontorsprogram/155506-skapa-knappar-i-excel"
---

# Skapa knappar i Excel

## #1 — vasy, 2007-01-03T14:57Z

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

Permalänk: https://www.webforum.nu/p/155506

## #2 — MindreVetande, 2007-01-03T17:37Z

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

Permalänk: https://www.webforum.nu/p/1917613

## #3 — vasy, 2007-01-04T08:08Z

Hej

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

Permalänk: https://www.webforum.nu/p/1917734

## #4 — MindreVetande, 2007-01-04T08:43Z

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

Permalänk: https://www.webforum.nu/p/1917750

## #5 — vasy, 2007-01-04T09:04Z

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

Permalänk: https://www.webforum.nu/p/1917757

## #6 — MindreVetande, 2007-01-04T10:34Z

> **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
Va**d**DuVillFlytta.cut (Va**r**DuVillFlytta)
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.

Permalänk: https://www.webforum.nu/p/1917793

---

Tråden på webben: https://www.webforum.nu/amne/kontorsprogram/155506-skapa-knappar-i-excel
