-1

以下の VBA コードを使用して、同じワークブック内の 2 つの Excel シートを、1 つのシートから取得される他の名前でコピーしました。

入力と出力の 2 つのシートがあります。これらのシートは、入力シートのセル C15 にある名前でコピーされます。

Name = ThisWorkbook.Sheets("Input").Cells(15,3).Value
ThisWorkbook.Activate
Sheets("Input").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = Name & " " & "Input"
Sheets("Output").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = Name & " " & "Output"

このコードは、入力シートをコピーするまで正常に機能しています。ただし、出力シートの名前も変更されており、シート名の出力がC15のセル値に置き換えられているため、最後の2行目でエラーが発生します。誰でもこれで私を助けることができます...

4

2 に答える 2

1

ActiveSheet が実際にはあなたが望むシートではないためだと思います。名前を変更するシートが最後のシートであることがわかっているため、代わりに Sheets オブジェクトを使用します。

newName = ThisWorkbook.Sheets("Input").Cells(15, 3).Value
ThisWorkbook.Activate
Sheets("Input").Select
Sheets("Input").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = newName & " " & "Input"
Sheets("Output").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = newName & " " & "Output"

また、上記のように、Name を変数として使用することはお勧めできません。

于 2013-01-10T12:41:42.883 に答える
1

上記の私のコメントに加えて、これを試してください

Option Explicit

Sub Sample()
    Dim sName As String

    With ThisWorkbook
        sName = .Sheets("Input").Cells(15, 3).Value

        .Sheets("Input").Copy After:=.Sheets(.Sheets.Count)
        ActiveSheet.Name = sName & " " & "Input"

        .Sheets("Output").Copy After:=.Sheets(.Sheets.Count)
        ActiveSheet.Name = sName & " " & "Output"
    End With
End Sub
于 2013-01-10T13:09:32.937 に答える