seegoon
seegoon

Reputation: 573

Running a macro on worksheets with a specified name

I am trying to write a macro which pastes over the formulae within certain-named worksheets with their values, thereby making them exportable. I have successfully got the macro to dupe and rename the worksheets, but can't get the copy/paste to run on them as I would like.

Currently my macro copies all visible worksheets except one specified ("Dashboard") and then renames them, replacing " (2)" with "_VARIABLES". So far so good. It is then supposed to overwrite formulae in the newly created worksheets with values; this part does not work.

Here is the entire code:

Private Sub testestssss()

Dim ws As Worksheet

'Copy all visible worksheets except "Dashboard" to the end

For Each ws In Sheets

If ws.Name = "Dashboard" Then
Else
If ws.Visible Then ws.Copy after:=Worksheets(Worksheets.Count)
End If

Next

'Rename all "wk * (2)" sheets to "wk *_VARIABLES"

For Each ws In Sheets
If ws.Name Like "* (2)" Then
ws.Name = Replace(ws.Name, " (2)", "_VARIABLES")
End If
Next

'Overwrite all "wk *_VARIABLES" formulae with values

For Each ws In Sheets
If ws.Name Like "*_VARIABLES" Then
Columns("A:B").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End If
Next

End Sub

So all the above works up until the 'overwrite all "wk *_VARIABLES" formulae with values' part. That appears to be ineffective.

Any help will be gratefully appreciated!

Thank you.

Upvotes: 1

Views: 2668

Answers (1)

assylias
assylias

Reputation: 328913

You keep selecting the column of the active sheet. This should do what you expect:

For Each ws In Sheets
    If ws.Name Like "*_VARIABLES" Then
        ws.Select
        Columns("A:B").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                    :=False, Transpose:=False
    End If
Next

Alternatively, you can simply write this (no need to select and it runs a bit faster without them):

For Each ws In Sheets
    If ws.Name Like "*_VARIABLES" Then
        ws.Columns("A:B").Copy
        ws.Columns("A:B").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                                       SkipBlanks:=False, Transpose:=False
    End If
Next

And finally to save a few keystrokes:

For Each ws In Sheets
    If ws.Name Like "*_VARIABLES" Then
        With ws.Columns("A:B")
            .Copy
            .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                          SkipBlanks:=False, Transpose:=False
        End With
    End If
Next

And don't forget to add the following statement after the copy/paste section:

Application.CutCopyMode = False

to keep things clean.

Upvotes: 3

Related Questions