1

特定の名前のワークシート内の数式に値を貼り付けてエクスポート可能にするマクロを作成しようとしています。ワークシートをコピーして名前を変更するマクロを正常に取得しましたが、コピー/貼り付けを希望どおりに実行できません。

現在、私のマクロは、指定されたもの (「ダッシュボード」) を除くすべての表示されているワークシートをコピーし、「(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" 式を値で上書きする」部分まで機能します。それは効果がないようです。

どんな助けでも感謝します!

ありがとうございました。

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 に答える