【问题标题】:Excel VBA Runtime Error 1004 when renaming ActiveSheet重命名 ActiveSheet 时 Excel VBA 运行时错误 1004
【发布时间】:2013-08-20 15:08:11
【问题描述】:

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

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

感谢所有的见解!

【问题讨论】:

  • 那么,代码哪里出错了?
  • 你能添加asName变量的样本值吗?可能存在不允许在工作表名称中使用的字符或/和文本可能超出工作表名称的长度限制。
  • 抱歉,代码在“if”语句处中断 - ActiveSheet.Name 行。上例中 asName 的值为“Flight 5 | Run 1 (0.0%)。据我所知,我没有使用任何禁止字符,并且在 31 个字符的限制内。
  • fNumber 和 pCheckNumber 是个位整数

标签: vba runtime-error rename concat


【解决方案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 错误):您正在从一个未实例化的对象 (worksheetName) 访问属性 Caption,其确切功能不是太多清除。只需删除这一行。

注意:KazJaw 说得好,您可能使用了非法字符。如果fNumberpCheckNumber 是数字或字母,就可以了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多