0

当我试图弄清楚这段代码在哪里出错时,我不知所措。我希望通过在活动表上使用两个范围的连接和一些静态文本来重命名活动表。当工作簿中只有一个工作表时,代码效果很好。添加第二个工作表后,我会立即收到运行时错误 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

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

我感谢所有的见解!

4

1 回答 1

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 的好点子,您可能使用了非法字符。如果fNumberandpCheckNumber是数字或字母,就可以了。

注意2:如果worksheetName您想在工作表中引用ActiveX Labelan,最好这样做:(标签的名称ActiveSheet.Label1.Caption在哪里Label1)。您不能定义 worksheetName为标签,因为它不是“常规标签”。

于 2013-08-20T15:26:16.503 回答