2017-04-12 116 views
1

好吧,我有一个电子表格,我试图复制一个新工作表,然后在原始电子表格中重新命名为一个单元格的值。当我第一次运行宏时,它工作正常。然而,随后的时间,它给了我“名称已经被采纳”的错误,并试图再次传递原始变量(x)的值,而不是在单元格C2中获取新值。VBA - 变量在第二次运行宏后没有更新

我是自学成才的,在这方面还是相当新的,所以任何帮助都将不胜感激。我觉得错误可能会出现在我的范围参考中,因为有一种不同的方式来声明变量(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,我在第一次将其更改为10011-02,但它仍然给我同样的错误,然后当我返回到Sheet 1时,宏已将10011-02替换为原来的10011-01。 – DataNinja

回答

1

不能有两张同名的纸张。因此,当您第二次运行代码时,添加的新工作表将根据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' 这样才会保留值并取出任何使用的公式吗? – DataNinja

+0

所以现在我得到一个错误“运行时错误‘1004’: ,当我打开调试它的指向代码 'activesheet.usedrange.value = activesheet.usedrange.value' – DataNinja

+0

是的,它都将转换公式到它们在ActiveSheet上的值 – sktneer

相关问题