我正在尝试编写一个宏,该宏在某些命名的工作表中粘贴其值,从而使它们可以导出。我已经成功地使用宏来重写并重命名工作表,但无法按照我的意愿在其上运行复制/粘贴。
目前我的宏复制除了一个指定的(“仪表板”)之外的所有可见工作表,然后重命名它们,将“(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“带有值的公式”部分。这似乎是无效的。
感谢任何帮助!
谢谢。
答案 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
保持清洁。