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

LÖST Tillägg i makro ??

Rekommendera Poster

pefra

Jag har en knapp till nedanstående makro som gör vad den skall. MEN

Nu vill jag flytta den knappen till en annan flik som heter sammanställning
men ändå få makrot att köra på EURO1.
Vad behöver ändras ?.

 

 

' EURO1 Makro
'

'
     Range("AH23").Select
    Selection.Copy
    Range("W42").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("W2:Y41").Select
    Selection.ClearContents
    Range("AE40:AH40").Select
    Selection.Copy
    Range("AE37:AH37").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
End Sub

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Ove Söderlund

Släng in koden i en modul och koppla sedan den till en knapp i det önskade bladet;

 

Sub EURO1()
    
    Dim wsEURO1 As Worksheet
    
    Set wsEURO1 = Worksheets("EURO1")
    
    With wsEURO1
        
        .Range("AH23").Copy
        .Range("W42").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        .Range("W2:Y41").ClearContents
        .Range("AE40:AH40").Copy
        .Range("AE37:AH37").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    
    End With

        Range("A1").Select

End Sub

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_

Du borde dessutom hoppa över kopiera/klistra in (kan röra till det)

 

Det enklaste är att tilldela målcellen värdet i källcellen. 

Jag har inte testat men det borde fungera att göra om With-delen av Oves kod så här:

    With wsEURO1
        .Range("W42").value=.Range("AH23").value
        .Range("W2:Y41").ClearContents
        .Range("AE37:AH37").value= .Range("AE40:AH40").value
    End With

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pefra

Nedanstående kod körs i fliken sammanställning,
medan resten körs i  fliken Euro1
.Range("W2:Y41").ClearContents

Går det att fixa till i koden eller måste jag
flytta om i arbetsboken ?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Ove Söderlund

Då bör det se ut så här i koden;

 

Sub EURO1()
    
    Dim wsEURO1 As Worksheet, wsSammanSt As Worksheet
    
    Set wsEURO1 = Worksheets("EURO1")
    Set wsSammanSt = Worksheets("Sammanställning")
    
    
    With wsEURO1
        
        .Range("W42").Value = .Range("AH23").Value
        .Range("AE37:AH37").Value = .Range("AE40:AH40").Value
    
    End With
    
   wsSammanSt.Range("W2:Y41").ClearContents

   Range("A1").Select

End Sub

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_
Postad (redigerade)

**ED**

Jag missade att Ove hade svarat så du får i princip samma svar en gång till. 

Men det tyder ju på att det är bra 😎

**/ED**

 

Så här blir det om du skriver ut en ordentlig Blad-adress för varje kommando

Sub EURO1()
Worksheets("EURO1").Range("W42").Value = Worksheets("EURO1").Range("AH23").Value
Worksheets("EURO1").Range("AE37:AH37").Value = Worksheets("EURO1").Range("AE40:AH40").Value

Worksheets("sammanställning").Select
Worksheets("sammanställning").Range("A1").Select
Worksheets("sammanställning").Range("W2:Y41").ClearContents

End Sub

 

Då framgår det var du vill göra vad. Men det kanske är lite rörigt att läsa. Då är ju Oves typ av kod mycket lättare att läsa. Då ser du tydligt att Först jobbar du med bladet EURO1. När det är klart (End With) så går du till bladet sammanställning och gör lite andra saker: 

 

Sub EURO1_2()

With Worksheets("EURO1")
    .Range("W42").Value = .Range("AH23").Value
    .Range("AE37:AH37").Value = .Range("AE40:AH40").Value
End With


With Worksheets("sammanställning")
    .Select
    .Range("A1").Select
    .Range("W2:Y41").ClearContents
End With

End Sub

 

PS.

Obs: Du bör inte selecta A1 direkt. Då hamnar du på det blad som råkar vara aktivt. Det är bättre att välja blad först (select eller activate).

Redigerad av MH_

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pefra

Har lagt in koden i en modul och kopplat den till knappen,
men får
Körfel nr. ´9´.: Indexet är utanför intervall.
på alla koderna. har provat med alla.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_

Testa att stega koden. Dvs ställ dig i början av koden och tryck på Knappen [F8] så att koden hoppar fram ett steg. tryck på [F8] tills du får felet.

 

Gissning:

Jag misstänker att Fliknamnen blir fel. T.ex att 

Worksheets("EUR01")

egentligen skall vara

Worksheets("EURO1")  (nolla eller bokstaven O)

Kolla så att det inte finns mellanslag i fliknamnet och kopiera sedan Fliknamnet direkt in i koden.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pefra

Nu efter en del sökande har jag fått till det som det ska.
Tack. Ove S och MH för all hjälp, utan er hade jag inte fixat detta.
/pefra

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Monshi

Sista ord i denna tråd:

Bort med alla Select och Activate

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pefra

Monshi, ja ovanstående som du hänvisar till är över min kunskap i vba-kodning.
Men om du vill skriva en enkel, smidig, säker och snabb kod, så tar jag tacksamt
emot en sådan utan activate och Select, om det kan bli enklare.
Här nedan är koden som används nu som du i så fall kan skriva om i fall du har lust.
/pefra

Sub EURO1()
  Worksheets("EURO1").Range("W42").Value = Worksheets("EURO1").Range("AH23").Value
  Worksheets("EURO1").Range("AE37:AH37").Value = Worksheets("EURO1").Range("AE40:AH40").Value

  Worksheets("INMATNING ALLA").Select
  Worksheets("INMATNING ALLA ").Range("A1").Select
  Worksheets("INMATNING ALLA ").Range("W2:Y41").ClearContents

End Sub
 
 
 
 
 
 
 
 
 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Monshi
Postad (redigerade)

Ett enkel exempel då av koden ovan.

Sub EURO1()

    With Worksheets("EURO1")
        .Range("W42").Value = .Range("AH23").Value
        .Range("AE37:AH37").Value = .Range("AE40:AH40").Value
    End With
    
    Worksheets("INMATNING ALLA ").Range("W2:Y41").ClearContents

End Sub

With - ger att alla funktioner som inleds med . utgår från objektet i With. I detta fall arbetsbladet.

Om du ska arbeta på ett bladet behöver du inte aktivera eller välja det, bara att arbeta med referensen.

Används Activate och Select enbart om du vill visa ett slutresultat, navigera till något, i slutet av koden.

 

Redigerad av Monshi
Buggfix av koden

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Monshi

Och ja vi dra det ett steg till, säkra mot klåfingriga användare, byt ut

Worksheets("EURO1")

med det VBA-namn som finns, då bara att skriva exempelvis

Blad1.Range("A1:A100") = "My macro f___ed up everything!"

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63
2 timmar sedan, skrev pefra:

Tack Monshi.
 

Bra att tråden är markerad som löst men det vore väl bättre om den gröna bocken (Markera som bästa lösning) hamnade på ett annat inlägg än ditt eget?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pefra
2 timmar sedan, skrev Mikael63:

Bra att tråden är markerad som löst men det vore väl bättre om den gröna bocken (Markera som bästa lösning) hamnade på ett annat inlägg än ditt eget?

Hej. Är ny här och kanske missat eller missförstått något.

1. Är det inte jag som vet om det är bästa lösningen och att frågan är löst ?.

2. Var eller vem skall i så fall använda sig av den gröna bocken ?.

3. Hur är den tänkt att den skall användas ?.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63

1. Jo

2. Du eller moderator

3. Man sätter bocken vid det inlägg som besvarade frågan.

Som den NU är vid Monshis inlägg med texten "Ett enkel exempel då av koden ovan."

Tidigare var bocken vid ditt eget inlägg med texten "Tack Monshi."

 

8 minuter sedan, skrev pefra:

Hej. Är ny här och kanske missat eller missförstått något.

Ingen fara!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Cecilia

Som tillägg och förtydligande till Mikael63s svar:

3. Bocken är till för dem som i framtiden har samma eller likartat problem så att de snabbare kan hitta den lösning som hjälpte dig och förhoppningsvis då något som även löser deras problem.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pefra
48 minuter sedan, skrev Cecilia:

Som tillägg och förtydligande till Mikael63s svar:

3. Bocken är till för dem som i framtiden har samma eller likartat problem så att de snabbare kan hitta den lösning som hjälpte dig och förhoppningsvis då något som även löser deras problem.

Tack. Då tänkte jag rätt, fast bocken blev på fel ställe.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pefra
15 timmar sedan, skrev Monshi:

Ett enkel exempel då av koden ovan.


Sub EURO1()

    With Worksheets("EURO1")
        .Range("W42").Value = .Range("AH23").Value
        .Range("AE37:AH37").Value = .Range("AE40:AH40").Value
    Wend
    
    Worksheets("INMATNING ALLA ").Range("W2:Y41").ClearContents

End Sub

With - ger att alla funktioner som inleds med . utgår från objektet i With. I detta fall arbetsbladet.

Om du ska arbeta på ett bladet behöver du inte aktivera eller välja det, bara att arbeta med referensen.

Används Activate och Select enbart om du vill visa ett slutresultat, navigera till något, i slutet av koden.

 

Får Kompileringsfel : "Wend utan While"

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pefra

Får Kompileringsfel : "Wend utan While"

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Monshi

Oh, my bad. End With ska det stå, inget annat. Fixar det i inlägget ovan.

While - Wend

With - End With

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Monshi

Japp, ibland blir det fel helt enkelt. With - End With, While - Wend

Det är ett mycket simpelt språk VBA.

Borde egentligen räcka med ett End på vad för olika startvärden som helst, While, With, For,  If...

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...