Gå til innhold

[Løst]Paste Special Values via Excel makro


Anbefalte innlegg

Hei,

 

 

Makroen jeg har laget i "Hente data fra en excelarbeidsbok til en annet via makroer " vil jeg nå gjerne ha til å kun kopiere verdien i cellene. Jeg har tatt utgangspunkt i "hjelp" i excel, og laget en ny makro men får feilmelding. Makroen ser nå slik ut:

 

-------------------------

 

Private Sub CommandButton1_Click()

 

Dim olddoc As Workbook

Dim newdoc As Workbook

 

Set olddoc = Workbooks.Open(ThisWorkbook.Path + "\Bok1.xls")

Set newdoc = Workbooks.Open(ThisWorkbook.Path + "\Bok2.xls")

 

olddoc.Worksheets("Sheet 1").Range("M3:FE3").Copy

newdoc.Worksheets("Sheet 1").Range("M3").Select

ActiveCell.PasteSpecial Paste:=xlPasteValues, _

Operation:=xlNone, SkipBlanks:=False, Transpose:=True

 

Set olddoc = Nothing

Set newdoc = Nothing

 

End Sub

 

--------------------------------------

 

Dersom jeg kopierer eksempelet fra "hjelp" direkte fungerer det selvfølgelig, men når jeg skal overføre koden til å gå fra en arbeidsbok til en annet gjør jeg tydligvis noe feil, og får feilmeldingen: "Run Time error '1004': Select method of Range class failed". trykker jeg på debug så er det følgende som highlightes: "newdoc.Worksheets("Sheet 1").Range("M3").Select"

 

Noen som vet hva jeg gjør feil, og evt hvordan koden kan endres til å fungere?

Lenke til kommentar
Videoannonse
Annonse

Skal jeg gjette på at feilen er at du kaller Sheet1 for Sheet 1 ?

 

Men ikke driv med select og copy og greier, du får treg, sårbar kode, ting flimrer under kjøring, og etter kjøring er brukeren et helt annet sted enn ved start. Operasjonen er så enkel som dette:

 

newdoc.Worksheets("Sheet1").Range("M3:FE3").Value = _
olddoc.Worksheets("Sheet1").Range("M3:FE3").Value

 

HTH. Beste hilsen Harald

Lenke til kommentar

Flott, den funket som den skulle, og var mye enklere bygd opp enn det jeg hadde funnet ja.

 

Er det mulig å velge en range som består av flere enkeltceller eller områder, slik at jeg slipper å lage mange koder under hverandre for hvert ark. F.eks hvis jeg skal kopiere cellene M3:FE3, samt M39:FE39, G7:G32 og I7:I32 i et ark kan dette skrives på en kode? Jeg prøvde med

 

newdoc.Worksheets("In %").Range("M3:FE3;M39:FE39").Value = _

olddoc.Worksheets("In %").Range("M3:FE3;M39:FE39").Value

 

for å få med 2 av gangen, men det funket ikke. Er ikke allverdens arbeid å kopiere koden nedover for hvert område med celler, men er ganske mange celleområder som skal kopieres på enkelte ark, slik at det hadde gjort koden en del kortere.

 

Edit: På et av arkene skal den kopiere 2 ruter etter hverandre (A1 og A2 f.eks) så ikke nr 3, men nr 4 og 5, ikke 6 o.s.v. for 50 områder på 2 felt. Dersom det ikke er mulig å lage en range av mange tilfeldige områder, går det ann å lage en range som er logisk oppbygd slik som dette?

Endret av ??
Lenke til kommentar

Du bør lære deg å spille inn makroer når du er i tvil om syntaks. Gjør dette når du merker A1:A2;A4:A4, så vil du se

Range("A1:A2,A4:A5").Select

og dermed at du må bytte ut semikolon med komma.

 

Men unngå en svær kladas, gjør det heller i flere operasjoner med oversiktelige celleområder. Eller i en løkke med logikk som passer til logikken i regnearket ditt.

 

Beste hilsen Harald

Lenke til kommentar

Flott, da har jeg fått laget en makro jeg er fornøyd med (hvertfall foreløpig). Skal huske å forsøke å spille inn makro senere ja. Fikk ikke helt det må å velge en range som bestod av flere områder til å fungere, da den kopierte verdien fra det første område over i alle områdene i rangen. Slik at hvis det stod 1 i A1, 2 i A3, og 3 i A5, kopierte den over 1 i både A1, A3 og A5 hvis jeg skrev

 

newdoc.Worksheets("Sheet 1").Range("A1,A3,A5").Value = _

olddoc.Worksheets("Sheet 1").Range("A1,A3,A5").Value

 

Men var like greit å bare skrive en kode for hvert område som skulle kopieres, med litt copy/paste var det fort gjort å skrive.

 

Takk for all hjelp.

Lenke til kommentar
Fikk ikke helt det må å velge en range som bestod av flere områder til å fungere, da den kopierte verdien fra det første område over i alle områdene i rangen. Slik at hvis det stod 1 i A1, 2 i A3, og 3 i A5, kopierte den over 1 i både A1, A3 og A5 hvis jeg skrev

 

newdoc.Worksheets("Sheet 1").Range("A1,A3,A5").Value = _

olddoc.Worksheets("Sheet 1").Range("A1,A3,A5").Value

Sannelig :( . Det der må være en bug. Bra du ordnet det i alle fall.

 

Beste hilsen Harald

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...