在试图找出这段代码绊倒的地方时,我感到很茫然。我希望通过在活动表和一些静态文本上使用两个范围的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
我正在添加错误检查以确保我没有重复的工作表名称。但是,由于字段名称的性质,这种情况永远不会发生。
我很欣赏所有的见解!
答案 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的好处是,你可能使用的是非法角色。如果fNumber
和pCheckNumber
是数字或字母,那就没问题。
注意2:如果worksheetName
想要在工作表中引用ActiveX Label
,请更好地执行:ActiveSheet.Label1.Caption
(其中Label1
是标签的名称)。您无法将worksheetName
定义为标签,因为它不是“传统标签”。