Excel VBA循环正在工作,但在结束时出现运行时错误

Excel VBA循环正在工作,但在结束时出现运行时错误,excel,vba,loops,Excel,Vba,Loops,我正在运行For-Each循环,根据每个工作表中的字符串部分重命名工作簿中的每个工作表。下面的代码“起作用”,意味着每个工作表都被重命名,但随后我得到运行时错误1004“应用程序定义或对象定义错误” 我尝试了几种修复方法,例如使用“ws”而不是“sht”,尝试单元格引用而不是“Range”,以及在If语句中设置Else For Each sht In ThisWorkbook.Worksheets If sht.Name <> "Control" Then

我正在运行For-Each循环,根据每个工作表中的字符串部分重命名工作簿中的每个工作表。下面的代码“起作用”,意味着每个工作表都被重命名,但随后我得到运行时错误1004“应用程序定义或对象定义错误”

我尝试了几种修复方法,例如使用“ws”而不是“sht”,尝试单元格引用而不是“Range”,以及在If语句中设置Else

    For Each sht In ThisWorkbook.Worksheets
        If sht.Name <> "Control" Then
            sht.Name = Replace(sht.Range("A10"), "Using Restrictions of: Category Filter (Product) - ", "")
        End If
    Next
此工作簿中每个sht的
。工作表
如果短名称为“控制”,则
sht.Name=Replace(sht.Range(“A10”),“使用限制:类别过滤器(产品)-”,“”)
如果结束
下一个
对于字符串为“使用限制:类别过滤器(产品)-旅行和运输”的工作表: 1-我希望该表改名为“旅行与运输” 2-对于要相对于单元格A10中该工作表的字符串值重命名的每个工作表(名为“Control”的工作表除外) 3-使接头结束时无错误。
实际:1和2成功,但不是3为了测试,请查看您是否无法执行以下操作:

dim sht as worksheet, z as string, arr as variant, x as long
arr = Array("/", "\", "'", ",", "!", "@", "(", ")", "&", "-", "Using Restrictions of: Category Filter (Product) - ")
For Each sht In ThisWorkbook.Worksheets
    If sht.Name <> "Control" Then 
        z = sht.cells(10,1).value
        For x = LBound(arr) To UBound(arr)
            z = Replace(z, arr(x), "")
        Next x
        if len(z) > 0 then sht.Name = z
    End if
Next
dim sht作为工作表,z作为字符串,arr作为变量,x作为长度
arr=数组(“/”、“\”、“'”、“、”、“!”、“@”、“(“、”、“&”、“-”、“使用限制:类别筛选器(产品)-”)
用于此工作簿中的每个sht。工作表
如果短名称为“控制”,则
z=短单元格(10,1).值
对于x=LBound(arr)到UBound(arr)
z=替换(z,arr(x),“”)
下一个x
如果len(z)>0,则sht.Name=z
如果结束
下一个
我怀疑你的名字上没有其他符号

当工作表名称要包含的字符串中有不必要的符号时,会出现以下错误:


Edit1:


在z=0的情况下添加了一个catch,因此在执行代码后,不会更改sht名称,如果工作表的新名称最终为空或超过其可容纳的最大字符数,则我将得到
运行时错误1004“应用程序定义的或对象定义的错误

例如,如果在某些工作表中,A10为空,则可能会出现这种情况。在这种情况下,新名称最终将为空

另一种可能发生这种情况的情况是,如果您为替换而搜索的字符串与在A10中找到的字符串不相同

"Using Restrictions of: Category Filter (Product) - "
但是,例如A10缺少一个空格字符:

"Using Restrictions of: Category Filter (Product)- Travel & Transport"
在这种情况下,新名称最终将等于超过最大字符数的10个值

另一种可能是
Control
工作表名称的拼写与
If语句中的拼写不同。在这种情况下,所有工作表都将被重命名,如果
Control
中的A10为空,则会出现
运行时错误1004

因此,我的建议是:

  • 确保没有隐藏的工作表(在工作表选项卡上单击鼠标右键,然后单击“取消隐藏”)
  • 确保要从循环中排除的工作表是 拼写方式与您的
    If语句中的拼写方式完全相同
  • 确保
    “Control”
    是应从循环中排除的唯一工作表
  • 确保使用:类别筛选器的限制来执行此
    ”
    (产品)-“
    在您需要的任何工作表中都没有拼写错误 要重命名
  • 确保使用:类别过滤器的限制条件来执行
    ”之后的任何操作
    (产品)-“
    ”不超过工作表名称可容纳的最大字符数