VBA - 变量第二次运行宏后不更新

时间:2017-04-12 19:38:27

标签: excel vba excel-vba excel-2013

好的,所以我有一个电子表格,我试图将其作为新工作表复制,然后在原始电子表格中重命名为单元格的值。当我第一次运行宏时,它工作正常。然而,在随后的时间里,它给出了“名称已被占用”错误,并尝试再次传递原始变量(x)的值,而不是在单元格C2中获取新值。

我是自学成才,但仍然相当新,所以任何帮助都会非常感激。我觉得错误可能会出现在我的范围参考中,因为有一种不同的方式来声明变量(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 个答案:

答案 0 :(得分:1)

不能有两张同名的纸张。因此,当您第二次运行代码时,添加的新工作表将根据Sheet1中的单元格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

如果每次在下次运行代码之前更改C2值,上面的代码将无问题地运行。