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

Copy-metoden i Worksheet-klassen misslyckades - Excel


solbulle

Rekommendera Poster

Hej.

 

Jag har en fil som utgår från en kolumn med kundnummer och tar nummer efter nummer och hämtar lite data. Sen kopierar filen det aktuella bladet och lägger det som sista blad, sen fortsätts det med ett nytt nummer osv.

 

Mitt problem är att detta fungerar oftast, men ibland får jag felet:

 

Körfel nr '1004'.:

 

Copy-metoden i Worksheet-klassen misslyckades

 

Felet pekar på raden:

 

Worksheets([GRÅ]"12345"[/GRÅ]).Copy after:=Woorksheets(i)

 

Är det någon som kan ha en aning om vad jag gör fel? Eller kan göra för att förhindra det hela?

 

För att få det att fungera igen måste jag stänga filen och börja om, annars brukar jag få felet än tidigare än innan.

Det känns som om det kanske blir fullt i minnet på något sätt..

 

Länk till kommentar
Dela på andra webbplatser

Nä, jag vet inte på rak arm vad som kan vara fel. Kanske något annat i koden som ger "följd-fel". Nä, jag vet inte.

 

Men två saker du kan testa:

1: Specificera din arbetsbok, dvs:

    ActiveWorkbook.Sheets([GRÅ]"Blad1"[/GRÅ]).Copy Before:=ActiveWorkbook.Sheets(2)

2: Option Explcit - skriv in det på första raden i dina kod-filer. Detta ger att du alltid måste allockera dina variabler innan du använder dem. Ett enkelt sätt att hitta fel i koden.

 

Slut på minne? Nja, tror inte det, borde inte vara det...

 

Vi börjar med detta.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Jag testade att lägga in dina ändringar men tyvärr dyker felet upp ändå.

 

Länk till kommentar
Dela på andra webbplatser

Copy metoden brukar för misslyckas när jag misslyckats att helt specificera vilka områden det gäller eller att koden för närvarande inte kan nå det område som önskas.

 

Så undersök:

Vilken är din aktiva cell när felet uppstår?

Aktivt blad?

Bok?

Någon cell i editeringsläge?

 

Famlar:

Application.CutCopyMode ??

 

Testa att ta bort andra delar av koden, för jag tror felet ligger där. Du gör något där som gör så att kopieringen senare misslyckas.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

1. Antar att de 2 oo:na i Woorksheets(i) inte står i din riktiga kod (borde ge kompileringsfel)?

 

2. Hur får du fram "i" ? kan det vara ett tankefel där.

 

i = ActiveWorkbook.Worksheets.Count
ActiveWorkbook.Worksheets([GRÅ]"12345"[/GRÅ]).Copy after:=Worksheets(i)

 

Länk till kommentar
Dela på andra webbplatser

Jag har egentligen alltid samma utgångsläge.

 

Det är en fil som "per automatik" kör ett makro som hämtar data ur en databas med hjälp av ett kundnummer, och kopierar sen det aktuella bladet så det hamnar sist i arbetsboken. (Det är här det går fel, ibland...)

Sen går makrot över till nästa kundnummer.

 

Ibland fungerar det, ibland inte. Stänger jag filen och börjar om så fungerar det. Ska jag sen köra filen igen kan det knasa.

 

Application.CutCopyMode hm... jag ska testa det.

 

Länk till kommentar
Dela på andra webbplatser

Vilken version av Excel kör du?

Hur många blad är det i de arbetsböcker där det blir fel?

Äldre versioner av Excel drabbas ganska lätt av "minnesbrist", oceh det kan ge väldigt konstiga fel.

 

/Pär B

 

Länk till kommentar
Dela på andra webbplatser

Jag kör version Excel 2003.

 

Det är upp till 40 blad jag får fram totalt, men ibland bara 10 och det blir fel på första, dock efter att jag redan kört en sväng och sen raderat bladen.

 

Det "känns" verkligen som om det skulle kunna vara någon form av minnesbrist eller liknande, eftersom att det fungerar efter att jag startat om filen.

 

 

//solbulle

www.solbulle.com

 

Länk till kommentar
Dela på andra webbplatser

Nej, i min riktiga kod är det rättstavat.

 

Det skulle kunna vara en fallucka med i, tänker jag fel där?

Nu skriver jag precis som i dina kodrader, men det fungerar inte alltid.

 

//solbulle

www.solbulle.com

 

Länk till kommentar
Dela på andra webbplatser

Jag tror det kan vara så här:

Du kör en sväng, och sedan raderar du flikarna och kör en sväng till utan att stänga filen. Då kan det vara så att indexen för flikarna blir helt fel. Det vill säga om du försöker få fram vilket som är högsta använda index så pekar det förmodligen fortfarande på den sista av de raderade flikarna, men om du försöker klistra in där så är det typ i tomma intet.

 

Du ser ett exempel på detta om du öppnar en tom kalkyl (då får flikarna namnen Blad1, Blad2, osv), raderar de sista flikarna, och sedan infogar en ny flik. Den nya fliken får namnet BladX där X är det tidigare högsta numret+1.

 

Två möjliga lösningar:

1. Kör aldrig om utan att stänga filen emellan.

2. Hitta ett annat sätt att identifiera sista fliken.

 

/Pär B

 

Länk till kommentar
Dela på andra webbplatser

lägg in lite felsökning för att kolla värdet på i

 

MsgBox ("antal=" & i)

MsgBox ("antal=" & ActiveWorkbook.Worksheets.Count)

MsgBox ("markerad tabb=" & ActiveSheet.Index)

 

Osv

 

Annars skulle det kunna vara ("12345").

Är du 100% på att den verkligen finns?

Du kan ju testa ännu fler msgboxar ;-)

MsgBox ("Fliken jag försöker flytta har nr: " & Sheets("12345").Index)

 

/M

 

 

Länk till kommentar
Dela på andra webbplatser

Fast om det vore ett för stort index i eller felaktigt bladnamn skulle ett helt annat fel uppstå. Nämligen

"Subscript out of Range"

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

He, he, ska det vara så himla svårt att googla?

Om det här stämmer så får vi nästan skämmas gemensamt för vår lathet :thumbsdown:

Första träffen när man översätter felmeddelandet till "Copy Method Worksheet Class failed":

http://support.microsoft.com/default.aspx?scid=kb;en-us;210684&Product=xlw

 

This problem can occur when you give the workbook a defined name and then copy the worksheet several times without first saving and closing the workbook
Låter ungefär rätt, Frågan är hur man skall läsa "the worksheet".

...

To resolve this problem, save and close the workbook periodically while the copy process is occurring
Trist :-(

 

Note The number of times you can copy a worksheet before you must save the workbook varies with the size of the worksheet.

 

Det finns en workaround också, men det verkar mer handla om mallblad, inte föränderliga datablad.

 

 

 

Hmmm, det här kan ju också vara en lösning, dvs att du skapar ett nytt blad (från mall?) och klistrar in data från "12345" istället för att kopiera hela bladet.

http://support.microsoft.com/default.aspx?scid=kb;en-us;177634&Product=xlw

[inlägget ändrat 2005-06-01 16:41:28 av MH]

Länk till kommentar
Dela på andra webbplatser

Kanon! :thumbsup:

 

Det där verkar verkligen vara lösningen på mitt problem, jag har sökt, men verkligen inte hittat det där.

 

Att låta spara boken ska väl kunna fungera, som jag har nämnt fungerar det ju om man startar om, och ett sparande är ju i princip samma sak. (Det handlar väl om att avlasta minnet på något sätt.)

 

Jag ska testa med att låta spara boken mellan varven.

 

På sätt och vis tycker jag nästan att det är "larvigt" att en så pass simpel lösning som att addera ett blad och kopiera över innehållet ska lösa problemet. - Jag menar då borde dom väl eg. lika gärna kunna lösa det som egentligen ger upphov till det hela.

 

Jag får testa det med, att göra på det viset lär ju snabba upp processen om inte annat.

 

//solbulle

www.solbulle.com

 

Länk till kommentar
Dela på andra webbplatser

Jag har nu testat med att bara kopiera cellerna, det fungerar perfekt!

 

Riktigt bra. Helt underbat att inte behöva köra allt från början igen om och om igen. Nu kan jag till och med gå vidare och "automatisera" min fil ännu mer.

 

Jag tackar er alla som hjälpt mig framåt i denna fråga.

 

//solbulle

www.solbulle.com

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...