Avatar billede tjensen Nybegynder
25. september 2008 - 08:21 Der er 14 kommentarer og
1 løsning

For each sheet..

Hej,

Jeg har en ret avanceret workbook, som jeg ønsker en gang i mellem at gemme. Dog uden formler og links i.

Jeg har forsøgt lidt, og er nået frem til:

Option Explicit

Sub SaveCopy()
Dim ws As Worksheet
Dim i As Integer

i = 1
For Each ws In Worksheets
    ws.Cells.Copy
    ws.Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    ws.Cells.ClearComments
    i = i + 1
Next ws

End Sub

Det virker dog ikke. Har en ide om at det er mine grafer som ødelægger det, kan det passe?
Avatar billede jkrons Professor
25. september 2008 - 09:09 #1
Nu skriver du ikke, hvad der ikke virker. Når jeg kører din kode, virker den upåklageligt, så kan du ikke forklare lidt nærmere?
Avatar billede jkrons Professor
25. september 2008 - 09:12 #2
Koden kan diog skæres ned til:

Dim ws As Worksheet

For Each ws In Worksheets
    ws.Cells.Copy
    ws.Cells.PasteSpecial Paste:=xlPasteValues
    ws.Cells.ClearComments
Next ws

Du bruger jo alligevel ikke tælleren til noget.
Avatar billede tjensen Nybegynder
25. september 2008 - 14:01 #3
Jeg får fejlen:

Run-time error '-2147417847 (80010108)':
Method 'PasteSpecial' of object 'Range' failed
Avatar billede jkrons Professor
25. september 2008 - 22:36 #4
Er nogle af dine ark beskyttede?
Avatar billede tjensen Nybegynder
26. september 2008 - 10:43 #5
Nej det er der ikke.
Fandt dog lige ud af at, når jeg gemmer efter fejlen og kører makroen igen.
Så virker det. Men ikke første gang.

Kan det tænkes at der er noget overload fejl i det?
Avatar billede jkrons Professor
26. september 2008 - 10:56 #6
Det er muligt, men i givet fald forstår jeg ikke hvorfor. Du kopiere alle celler, og indsætter dem derefter igen. Har du prøvet kun at kopiere relevante celler, og så indsætte disse igen?
Avatar billede tjensen Nybegynder
26. september 2008 - 11:21 #7
Det svinger utrolig meget fra ark til ark, så har jeg ikke lyst til.
Mener heller ikke det er den rette løsning.

Hvordan er det nu med copy/indsæt funktionen, ændrer den sig i forhold til om det er range/graf'er/objekts/figurer man arbejder med?
Avatar billede jkrons Professor
26. september 2008 - 11:26 #8
Ikke så vidt jeg husker, men alt, hvad der kopieres, skal jo gemmes i RAM, og derefter indsættes. Så hvis der er mange data i de enkelte ark, kan dette måske forårsage problemet.
Avatar billede tjensen Nybegynder
26. september 2008 - 14:45 #9
Kan man evt. clear sin clipboard?

For Each ws In Worksheets
    ws.Cells.Copy
    ws.Cells.PasteSpecial Paste:=xlPasteValues
Clear.Clipboard....???
    ws.Cells.ClearComments
Next ws
Avatar billede jkrons Professor
26. september 2008 - 21:12 #10
Det må man kunne, men da clipboardet styres af Windows ikke af Excel, skal man nok have fat i en Windowskommando, og den har jeg ikke lige present.
Avatar billede friis5 Novice
30. september 2008 - 14:21 #11
Application.CutCopyMode = False

Burde være nok, hvis ikke så prøv;

Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Sub EmptyCB()
Dim hWnd As Long
    hWnd = FindWindow("XLMAIN", Application.Caption)
    OpenClipboard hWnd
    EmptyClipboard
    CloseClipboard
End Sub
Avatar billede tjensen Nybegynder
29. oktober 2008 - 10:02 #12
Jeg må helt ærlig give op på denne.
Kommer ikke uden om fejlen:

Run-time error '-2147417847 (80010108)':
Method 'PasteSpecial' of object 'Range' failed
Avatar billede tjensen Nybegynder
29. oktober 2008 - 10:15 #13
Hvis jeg lukker excel med task manager efter denne fejl, så skriver den at jeg ikke kunne udfører jobbet med de tilgængelige resurcer.

Så det er simpelthen en fejl i mængden af dataen.
Avatar billede jkrons Professor
29. oktober 2008 - 21:38 #14
Det har du nok ret i.
Avatar billede tjensen Nybegynder
06. november 2008 - 08:17 #15
Jeg løste det med følgende kode:

Sub PublishReport()
    Dim ws As Worksheet
    Dim strFileName As String
   
    Application.ScreenUpdating = False
   
    strFileName = ActiveWorkbook.Path & "\Reports\" & Format(Now(), "yyyy-mm-dd") & ".xls"
   
    Worksheets().Copy

    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=strFileName, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
 
    ActiveWorkbook.BreakLink Name:= _
        "DIR, FIL", _
        Type:=xlExcelLinks
   
    For Each ws In Worksheets
        ws.EnableSelection = xlNoRestrictions
        ws.Protect Contents:=True, UserInterFaceOnly:=False
    Next ws
   
    ActiveWorkbook.Protect Structure:=True, Windows:=False
   
    ActiveWorkbook.Sheets("Front Page").Select
   
    ActiveWorkbook.SaveAs Filename:=strFileName, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
     
     
    Application.DisplayAlerts = True
    ActiveWorkbook.Close
   
    Application.ScreenUpdating = True
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester