Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重命名ActiveSheet时Excel VBA运行时错误1004_Vba_Runtime Error_Rename_Concat - Fatal编程技术网

重命名ActiveSheet时Excel VBA运行时错误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

当我试图找出这段代码在哪里出错时,我不知所措。我希望通过在activesheet上使用两个范围的concat和一些静态文本来重命名activesheet。当工作簿中只有一个工作表时,代码工作得很好。一旦添加了第二个工作表,就会出现运行时错误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
选项显式
子更新名()
模糊数
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是一位整数