重命名ActiveSheet时,Excel VBA运行时错误1004

时间:2013-08-20 15:08:11

标签: vba runtime-error rename concat

在试图找出这段代码绊倒的地方时,我感到很茫然。我希望通过在活动表和一些静态文本上使用两个范围的concat来重命名活动表。当工作簿中只有一个工作表时,代码运行良好。一旦添加了第二个工作表,我就会得到运行时错误1004.我将突出显示它正在破坏的代码行。此代码目前位于普通模块中。

Option Explicit
Sub updateName()
    Dim fNumber
    Dim pCheckNumber
    Dim asName As String
    Dim tempASName As String
    Dim worksheetName As Object

If ActiveSheet.Name = "Launch Page" Then Exit Sub

fNumber = ActiveSheet.Range("FlightNumber").Value
pCheckNumber = ActiveSheet.Range("PerformanceCheckNumber").Value

If fNumber <> "" And pCheckNumber <> "" Then
    tempASName = "Flight " & fNumber & " | Run " & pCheckNumber & " (0.0%)"
    asName = tempASName
    MsgBox ActiveSheet.Name & vbCr & asName
    ActiveSheet.Name = asName
    worksheetName.Caption = asName
Else
    Exit Sub
End If

End Sub

我正在添加错误检查以确保我没有重复的工作表名称。但是,由于字段名称的性质,这种情况永远不会发生。

我很欣赏所有的见解!

1 个答案:

答案 0 :(得分:1)

您报告的错误很可能是因为尝试使用已在使用的名称重命名工作表而引发的。在这里你有一个小代码来避免这种情况:

Dim newName As String: newName = "sheet1"
Dim addition As String: addition = "_2"
Do While (Not sheetNameFree(newName))
   newName = newName & addition
Loop

sheetNameFree定义于:

Function sheetNameFree(curName As String) As Boolean
    sheetNameFree = True
    For Each Sheet In ActiveWorkbook.Sheets
        If (LCase(Sheet.Name) = LCase(curName)) Then
            sheetNameFree = False
            Exit Function
        End If
    Next Sheet
End Function

您可以根据自己的特定需求调整此代码(例如,将addition转换为每个错误名称后增长的数字。)

在您的代码中,我看到另一个问题(虽然它不应该触发1004错误):您正在从非实例化对象(Caption)访问属性worksheetName,其确切功能不太清楚。只需删除此行即可。

注意:KazJaw的好处是,你可能使用的是非法角色。如果fNumberpCheckNumber是数字或字母,那就没问题。

注意2:如果worksheetName想要在工作表中引用ActiveX Label,请更好地执行:ActiveSheet.Label1.Caption(其中Label1是标签的名称)。您无法将worksheetName定义为标签,因为它不是“传统标签”。