在具有指定名称的工作表上运行宏

时间:2012-05-31 14:52:47

标签: vba excel-vba excel

我正在尝试编写一个宏,该宏在某些命名的工作表中粘贴其值,从而使它们可以导出。我已经成功地使用宏来重写并重命名工作表,但无法按照我的意愿在其上运行复制/粘贴。

目前我的宏复制除了一个指定的(“仪表板”)之外的所有可见工作表,然后重命名它们,将“(2)”替换为“_VARIABLES”。到现在为止还挺好。然后应该用新值覆盖新创建的工作表中的公式;这部分不起作用。

以下是整个代码:

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

因此以上所有工作都会进行,直到'覆盖所有'wk * _VARIABLES“带有值的公式”部分。这似乎是无效的。

感谢任何帮助!

谢谢。

1 个答案:

答案 0 :(得分:1)

您继续选择活动工作表的列。这应该符合您的期望:

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

或者,你可以简单地写一下(不需要选择它,如果没有它们会运行得更快):

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

最后要保存一些按键:

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

并且不要忘记在复制/粘贴部分之后添加以下语句:

Application.CutCopyMode = False

保持清洁。