简体   繁体   中英

Copy, Paste Value, Save Worksheet - Multiple Worksheets

I have a workbook with many worksheets. I am attempting to use the below macro to cycle the worksheets, copy and paste value, then save off individually in a location.

I feel like I'm glossing over something very small and beginning to go bonkers. Currently this code copies and pastes value the first worksheet, and then saves the rest off without the copy/paste. So everything is working as desired with the exception of the copy/paste value not occurring with each worksheet.

Sub SaveFilesInFolder()
'
'This is for saving each worksheet as a workbook in a destination folder as an excel file
'

'
    Dim sh As Worksheet
    Dim wb As Workbook
    
    For Each sh In Worksheets
    
        With ActiveWorkbook
        Cells.Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
               
        SheetName = sh.Name
        sh.Copy
    
            .SaveAs Filename:="C:\Location\" & SheetName
            .Close SaveChanges:=True
        End With
    
    Next sh
 
End Sub

Any and all assistance is greatly appreciated.

Edit:

Below is the updated code from comments. Unfortunately, the sheet is still copying/pasting for the first worksheet and not the rest. Everything is saving in the specified location as intended.

Sub SaveFilesInFolder()
'
'This is for saving each worksheet as a workbook in a destination folder as an excel file
'

'
    Dim sh As Worksheet
    Dim wb As Workbook
    Dim rng As Range
    
    For Each sh In ThisWorkbook.Worksheets
    
        Set rng = Cells
    
        rng.Copy
        rng.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
               
        sh.Copy
        ActiveWorkbook.SaveAs ("C:\Location\" & sh.Name)
        ActiveWorkbook.Close
    
    Next sh
 
End Sub

Try it without the clipboard. I've also turned off alerts (for saving over files) and done a small amount of clean up.

Sub SaveFilesInFolder()
'
'This is for saving each worksheet as a workbook in a destination folder as an excel file
'

'
    On Error GoTo e

    Application.DisplayAlerts = False
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Worksheets
    
        With sh.UsedRange
            .Value2 = .Value2
        End With
        
        sh.Copy
        ActiveWorkbook.Close True, "C:\Location\" & sh.Name
    Next sh
e:
'   Ensure alerts are turned back on before re-throwing.
    Application.DisplayAlerts = True
    If Err > 0 Then Err.Raise Err
End Sub

Export Worksheets

  • To leave the source workbook intact, convert formulas to values in the destination workbooks.
Sub ExportWorksheets()

    Const dFolderPath As String = "C:\Location\"

    Dim swb As Workbook: Set swb = ThisWorkbook

    Dim dPath As String: dPath = dFolderPath
    If Right(dPath, 1) <> Application.PathSeparator Then
        dPath = dPath & Application.PathSeparator
    End If

    Application.ScreenUpdating = False
    
    Dim sws As Worksheet
    Dim dwb As Workbook
    Dim dws As Worksheet
    Dim drg As Range

    For Each sws In swb.Worksheets

        sws.Copy ' copied to a new single-worksheet workbook

        Set dwb = Workbooks(Workbooks.Count) ' the last
        Set dws = dwb.Worksheets(1) ' the one and only
        Set drg = dws.UsedRange

        drg.Value = drg.Value ' formulas to values

        Application.DisplayAlerts = False ' to overwrite without confirmation
            dwb.SaveAs dPath & dws.Name
        Application.DisplayAlerts = True

        dwb.Close SaveChanges:=False ' it's already been saved

    Next sws

    Application.ScreenUpdating = True

    MsgBox "Worksheets exported to single-worksheet workbooks.", vbInformation

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM