重命名ActiveSheet时Excel VBA运行时错误1004
当我试图找出这段代码在哪里出错时,我不知所措。我希望通过在activesheet上使用两个范围的concat和一些静态文本来重命名activesheet。当工作簿中只有一个工作表时,代码工作得很好。一旦添加了第二个工作表,就会出现运行时错误1004。我将突出显示正在中断的代码行。此代码当前驻留在普通模块中重命名ActiveSheet时Excel VBA运行时错误1004,vba,runtime-error,rename,concat,Vba,Runtime Error,Rename,Concat,当我试图找出这段代码在哪里出错时,我不知所措。我希望通过在activesheet上使用两个范围的concat和一些静态文本来重命名activesheet。当工作簿中只有一个工作表时,代码工作得很好。一旦添加了第二个工作表,就会出现运行时错误1004。我将突出显示正在中断的代码行。此代码当前驻留在普通模块中 Option Explicit Sub updateName() Dim fNumber Dim pCheckNumber Dim asName As String
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
选项显式
子更新名()
模糊数
Dim pCheckNumber
将名称设置为字符串
Dim tempASName作为字符串
将工作表名称设置为对象
如果ActiveSheet.Name=“启动页面”,则退出子页面
fNumber=ActiveSheet.Range(“FlightNumber”).Value
pCheckNumber=ActiveSheet.Range(“PerformanceCheckNumber”).值
如果fNumber“”和pCheckNumber“”,则
tempASName=“Flight”&fNumber&“Run”&pCheckNumber&“(0.0%)”
asName=tempASName
MsgBox ActiveSheet.Name&vbCr&asName
ActiveSheet.Name=asName
worksheetName.Caption=asName
其他的
出口接头
如果结束
端接头
我正在添加错误检查,以确保没有重复的工作表名称。但是,由于字段名的性质,这种情况永远不会发生
我感谢所有的见解 您报告的错误很可能是由于试图使用已在使用的名称重命名工作表而引起的。这里有一个避免这种情况的小代码:
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
您可以根据您的具体需要调整此代码(例如,通过将加法
转换为一个在每个错误名称后增长的数字)
在您的代码中,我看到了另一个问题(尽管它不应该触发1004错误):您正在从一个非实例化对象(worksheetName
)访问属性Caption
),该对象的确切功能不太清楚。删除这一行
注意:KazJaw的观点很好,您可能使用了非法字符。如果fNumber
和pCheckNumber
是数字或字母,则可以
注2:如果使用
worksheetName
希望在工作表中引用ActiveX标签
,最好这样做:ActiveSheet.Label1.Caption
(其中Label1
是标签的名称)。您不能将worksheetName
定义为标签,因为它不是“常规标签”。那么,代码在哪里中断?您可以添加asName
变量的样本值吗?工作表名称中可能有不允许使用的字符,或者/或者文本可能超过工作表名称的长度限制。很抱歉,代码在“if”语句-ActiveSheet.name行中断。上述示例中asName的值为“Flight 5 | Run 1(0.0%)。据我所知,我没有使用任何禁止字符,并且在31个字符的限制范围内。fNumber和pCheckNumber是一位整数