Excel VBA循环正在工作,但在结束时出现运行时错误
我正在运行For-Each循环,根据每个工作表中的字符串部分重命名工作簿中的每个工作表。下面的代码“起作用”,意味着每个工作表都被重命名,但随后我得到运行时错误1004“应用程序定义或对象定义错误” 我尝试了几种修复方法,例如使用“ws”而不是“sht”,尝试单元格引用而不是“Range”,以及在If语句中设置ElseExcel 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 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”
是应从循环中排除的唯一工作表
确保使用:类别筛选器的限制来执行此”
(产品)-“
在您需要的任何工作表中都没有拼写错误
要重命名
确保使用:类别过滤器的限制条件来执行”之后的任何操作
(产品)-“
”不超过工作表名称可容纳的最大字符数