1

我正在尝试编写一个宏,该宏将其值粘贴在某些命名工作表中的公式上,从而使它们可导出。我已经成功地让宏来复制和重命名工作表,但无法让复制/粘贴在它们上运行,因为我想要。

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

这是整个代码:

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”公式”部分。这似乎是无效的。

任何帮助将不胜感激!

谢谢你。

4

1 回答 1

2

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

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

保持清洁。

于 2012-05-31T14:57:06.057 回答