?? Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 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
Harald Staff Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 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
?? Skrevet 29. desember 2008 Forfatter Del Skrevet 29. desember 2008 (endret) 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 29. desember 2008 av ?? Lenke til kommentar
Harald Staff Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 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
?? Skrevet 30. desember 2008 Forfatter Del Skrevet 30. desember 2008 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
Harald Staff Skrevet 30. desember 2008 Del Skrevet 30. desember 2008 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå