Avatar billede kim1a Ekspert
02. august 2018 - 09:42 Der er 1 kommentar og
1 løsning

VBA activeworkbook vs thisworkbook

Jeg sidder og kæmper lidt med en løsning hvor jeg ønsker at tage tre specifikke faner fra en workbook og gemme dem som separate filer så de kan indlæses. Derudover ønsker jeg i samme ombæring at fjerne formler mv.

Jeg har derfor samlet denne stump kode af to forskellige forslag fra:
http://www.thesmallman.com/looping-through-worksheets/
https://stackoverflow.com/questions/20246465/how-to-copy-only-a-single-worksheet-to-another-workbook-using-vba

Min kode ser efter lidt ændringer således ud:

For Each sh In ActiveWorkbook.Worksheets ' Start of the VBA loop
    Select Case sh.Name
    Case Is = "Booking 209", "Booking 200", "Booking 208"
        sh.Copy
        Application.ActiveWorkbook.SaveAs Filename:=strPath & "\" & sh.Name & ".xlsx" ' notice the extra naming part
        ActiveWorkbook.Cells.Copy
        ActiveWorkbook.[A1].PasteSpecial Paste:=xlValues
        ActiveWorkbook.Cells.Hyperlinks.Delete
        Application.CutCopyMode = False
        Cells(1, 1).Select
        ActiveWorkbook.Activate
        Application.ActiveWorkbook.Close True
    End Select
Next sh

Fejlen ligger i Activeworkbook. Som nævnt ønsker jeg at skabe de nye filer som døde værdier, men jeg kan ikke ramme terminologien for at arbejde i den netop skabte workbook - det er ikke activeworkbook åbenbart, og naturligvis ikke thisworkbook (ide makroen køres fra en fil der ikke skal miste formler)
Avatar billede kim1a Ekspert
02. august 2018 - 09:44 #1
Hvis nogen ønsker at teste, kan man se at denne del virker, blot skab en workbook med de tre faner:

sub test()
Dim strPath As String
strPath = Application.ActiveWorkbook.Path

Application.ScreenUpdating = False
Application.DisplayAlerts = False

' copy the specific sheets to new workbook with name of sheet

For Each sh In ActiveWorkbook.Worksheets ' Start of the VBA loop
    Select Case sh.Name
    Case Is = "Booking 209", "Booking 200", "Booking 208"
        sh.Copy
        Application.ActiveWorkbook.SaveAs Filename:=strPath & "\Timevip" & sh.Name & ".xlsx"
        Application.ActiveWorkbook.Close False
    End Select
Next sh

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
Avatar billede kim1a Ekspert
02. august 2018 - 10:29 #2
Ah - fejlen var naturligvis at det var arket og ikke "bogen" jeg skulle vælge:

Dim strPath As String
strPath = Application.ActiveWorkbook.Path

Application.ScreenUpdating = False
Application.DisplayAlerts = False

' copy the specific sheets to new workbook with name of sheet

For Each sh In ActiveWorkbook.Worksheets ' Start of the VBA loop
    Select Case sh.Name
    Case Is = "Booking 209", "Booking 200", "Booking 208"
        sh.Copy
        ActiveSheet.Cells.Copy
        ActiveSheet.[A1].PasteSpecial Paste:=xlValues
        ActiveSheet.Cells.Hyperlinks.Delete
        Application.CutCopyMode = False
        Columns("N:S").EntireColumn.Delete
        Cells(1, 1).Select
        Application.ActiveWorkbook.SaveAs Filename:=strPath & "\Timevip" & sh.Name & ".xlsx" ' notice the extra naming part
        Application.ActiveWorkbook.Close False
    End Select
Next sh

Application.DisplayAlerts = True
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
Stort udvalg af Excel kurser til alle niveauer og jobfunktioner

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