• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Excelbladen apart opslaan

  • Onderwerp starter Onderwerp starter AatB
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

AatB

Gebruiker
Lid geworden
15 dec 2007
Berichten
257
Geacht Forum,

Ik gebruik de code van ron de bruin (www.rondebruin.nl) om alle bladen in een excelsheet apart op te slaan. Dit werkt perfect...

In de bronsheet zitten queries en macro's.
Nu wil ik deze niet meenemen in de apart opgeslagen sheets.

Kunnen jullie mij hierbij helpen?

mvg,

Aat


Code:
Sub Copy_Every_Sheet_To_New_Workbook()
'Working in 97-2007
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim Sourcewb As Workbook
    Dim Destwb As Workbook
    Dim sh As Worksheet
    Dim DateString As String
    Dim FolderName As String

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
    End With

    'Copy every sheet from the workbook with this macro
    Set Sourcewb = ThisWorkbook

    'Create new folder to save the new files in
    DateString = Format(Now, "yyyy-mm-dd hh-mm-ss")
    FolderName = Sourcewb.Path & "\" & Sourcewb.Name & " " & DateString
    MkDir FolderName

    'Copy every visible sheet to a new workbook
    For Each sh In Sourcewb.Worksheets

        'If the sheet is visible then copy it to a new workbook
        If sh.Visible = -1 Then
            sh.Copy

            'Set Destwb to the new workbook
            Set Destwb = ActiveWorkbook

            'Determine the Excel version and file extension/format
            With Destwb
                If Val(Application.Version) < 12 Then
                    'You use Excel 97-2003
                    FileExtStr = ".xls": FileFormatNum = -4143
                Else
                    'You use Excel 2007
                    If Sourcewb.Name = .Name Then
                        MsgBox "Your answer is NO in the security dialog"
                        GoTo GoToNextSheet
                    Else
                        Select Case Sourcewb.FileFormat
                        Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
                        Case 52:
                            If .HasVBProject Then
                                FileExtStr = ".xlsm": FileFormatNum = 52
                            Else
                                FileExtStr = ".xlsx": FileFormatNum = 51
                            End If
                        Case 56: FileExtStr = ".xls": FileFormatNum = 56
                        Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
                        End Select
                    End If
                End If
            End With

            'Change all cells in the worksheet to values if you want
            If Destwb.Sheets(1).ProtectContents = False Then
                With Destwb.Sheets(1).UsedRange
                    .Cells.Copy
                    .Cells.PasteSpecial xlPasteValues
                    .Cells(1).Select
                End With
                Application.CutCopyMode = False
            End If


            'Save the new workbook and close it
            With Destwb
                .SaveAs FolderName _
                      & "\" & Destwb.Sheets(1).Name & FileExtStr, _
                        FileFormat:=FileFormatNum
                .Close False
            End With

        End If
GoToNextSheet:
    Next sh

    MsgBox "You can find the files in " & FolderName

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub
 
AatB, Je hebt dus op dit moment code staan in de werkbladmodule zelf? Is het mogelijk om deze in een standaard module te plaatsen (of heb je er dingen in als 'sheet_change' e.d.)? De opdracht 'sheet.copy' neemt namelijk de code uit een standaard module niet mee over.
Als je wel sheetafhankelijke zaken in de modulesheet zelf hebt staan, kan je op internet ff zoeken naar code die code kan verwijderen (ben ik ooit tegengekomen). Of je moet niet gebruik maken van 'sheet.copy' (die automatisch voor de aanmaak van een nieuw workbook zorgt) maar van het keihard copieren van de inhoud van je sheet en dan via de code een workbooks.add doen en daar de inhoud van je sheet plaatsen...

Vervang dan dit stukje...
Code:
        'If the sheet is visible then copy it to a new workbook
        If sh.Visible = -1 Then
            sh.Copy
...voor deze...
Code:
        'If the sheet is visible then copy it to a new workbook
        If sh.Visible = -1 Then
            sh.Cells.Copy
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.Range("A1").Select


Groet, Leo
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan