2017-04-12 18 views
1

さて、新しいスプレッドシートとしてコピーして元のスプレッドシートのセルの値として再設定しようとしているスプレッドシートがあります。マクロを初めて実行すると、正常に動作します。しかしそれ以降、「Name is already taken」というエラーが表示され、セルC2で新しい値を取得する代わりに、元の変数(x)の値を再度渡そうとします。VBA - 変数マクロの2回目の実行後に更新されない

私は自習していますが、これでもまだかなり新しいです。どんな助けでも大いに感謝しています。私の範囲参照にエラーが入っているように感じます。変数(x )私が紛失しているかもしれないその細胞の価値に。

Sub freezesheet() 
    Dim x As String 

    Sheets("Sheet1").Activate 
    x = Range("C2:C2").Value 
    Debug.Print (x) 

    Sheets("Sheet1").Copy after:=Sheets(3) 
    Sheets("Sheet1 (2)").Name = x 
    x = "" 

    Debug.Print (x) 

    Cells.Select 
    selection.Copy 
    selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Application.CutCopyMode = False 

    End Sub 
+1

ワークシートの名前は、すべてのワークシートに固有の名前を付ける必要があります。 C2からワークシート名を取得しているため、C2の値が変更されなかった場合は、ワークシートに重複した名前を付けると、エラーが発生します。重複したワークシート名を割り当てようとしていないことを確認してください。 – tigeravatar

+0

マクロを実行すると、ブックのアクティブなシートがコピーになります。そのシート上のセルC2を更新すると、スクリプトがSheet1のセルC2を参照するため、マクロを再度実行すると、エラーが表示されます。あなたがこのミスを犯した可能性はありますか? – phhlho

+0

@tigeravatar - 私はそれを更新しようとするたびにセルC2を変更しています。例えば。最初の実行時のセルC2は10011-01であり、2回目の実行時にシート1の10011-02に変更されますが、シート1に戻るときに同じエラーが表示されます。マクロは10011-02を元の10011-01。 – DataNinja

答えて

1

同じ名前のシートが2枚あることはできません。したがって、コードをもう一度実行すると、追加された新しいシートは、Sheet1のセルC2に基づいて名前が変更されます。

また、あなたはこのようなコードを短くすることができますが、コードの次の時間を実行する前に、C2値を毎回変更した場合...

Sub freezesheet() 
    Dim x As String 

    Sheets("Sheet1").Activate 
    x = Range("C2").Value 

    Sheets("Sheet1").Copy after:=Sheets(3) 
    ActiveSheet.Name = x 
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value 
End Sub 

上記のコードは問題なく実行されます。

+0

ユーザーがシート1のセルC2を複数回更新して、セルC2を編集した後にこのマクロに割り当てられたボタンを押すと、新しいシートが作成される? 'ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value' これは値を保持し、使用される数式を取り出すだけですか? を、私は、デバッガを開いたときには、 'activesheet.usedrange.value = activesheet.usedrange.value' – DataNinja

+0

は、だから今、私は、「ランタイムエラー『1004』のエラーを取得していますその数値をActiveSheet上の値に設定します – DataNinja

+0

はい、それはすべて変換するコードを指しています: – sktneer