尝试重命名工作表时excel VBA中的对象必需错误

时间:2015-03-17 19:28:50

标签: excel vba excel-vba

我正在尝试复制特定工作表并将其重命名为final。代码如下:

Sub CreateSheet()
  Worksheets("Key metrics").Copy(Before:=Worksheets(1)).Name = "Final"
End Sub

程序执行直到复制带有内容的工作表,但然后它会抛出错误并且不会将我的新工作表重命名为最终工作。

提前感谢。

2 个答案:

答案 0 :(得分:2)

问题与您正在进行的嵌套有关。 Copy不返回工作表对象,因此您的错误。

试试这个:

Sub CreateSheet()
  with Excel.thisworkbook
    .Worksheets("Key metrics").Copy Before:=.Worksheets(1)
    .activesheet.Name = "Final"
  end with
End Sub

这是一个证实这一点的质量保证:
Why does Worksheet.Copy not return a reference to the new workbook created

如果这是一个小型的自包含helper例程,你可以使它成为一个带有工作表返回类型的函数:

Sub tst()

Dim mySht As Excel.Worksheet
Set mySht = crtSheet("foobar", "barfoo") '<<used via this

End Sub

Function crtSheet(ByVal tgtSheet As String, ByVal newName As String) As Excel.Worksheet
  Dim s As Excel.Worksheet
  With Excel.ThisWorkbook
    .Worksheets(tgtSheet).Copy Before:=.Worksheets(1)
    Set s = .ActiveSheet
    s.Name = newName
  End With
  Set crtSheet = s
End Function

答案 1 :(得分:0)

Sub CreateSheet()
Dim WS As Worksheet

Worksheets("Key metrics").Copy Before:=Worksheets(1)
Set WS = ActiveSheet
WS.Name = "Final"

End Sub

希望有所帮助。