Excel 工作表循环未跳过所需工作表
我试图让宏在所有工作表上执行查找和替换功能,除了包含查找和替换值的表所在的工作表。但是,执行宏时,它会替换表中的值,而不会替换其余工作表中的值 我从一个网站上提取了以下代码: 因为他们试图实现我的目标,但没有成功。我的数据被修改了一点,因为最初我的数据格式不同,但我修改了它以匹配网站输入,尽管如此,它仍然不起作用 我尝试过使用Worksheets.Count方法,并使用I=2循环到ws\u Count,将find&replace表作为第一张工作表,但是这也失败了。我还尝试了一种选择案例的方法,但也失败了 我想知道是否一些背景设置被改变了,这会阻止它识别图纸名称?不确定问题出在哪里,因为我的格式似乎与已解决的问题完全相同,这些问题的问题基本上是相同的Excel 工作表循环未跳过所需工作表,excel,vba,Excel,Vba,我试图让宏在所有工作表上执行查找和替换功能,除了包含查找和替换值的表所在的工作表。但是,执行宏时,它会替换表中的值,而不会替换其余工作表中的值 我从一个网站上提取了以下代码: 因为他们试图实现我的目标,但没有成功。我的数据被修改了一点,因为最初我的数据格式不同,但我修改了它以匹配网站输入,尽管如此,它仍然不起作用 我尝试过使用Worksheets.Count方法,并使用I=2循环到ws\u Count,将find&replace表作为第一张工作表,但是这也失败了。我还尝试了一种选择案例的方法,
Dim ws As Worksheet
Dim FindList As Long, ReplaceList As Long
Dim tbl As ListObject
Dim ReplaceArray As Variant
Dim j As Long
'Variable pointing to table
Set tbl = Worksheets("DataSheet").ListObjects("ReplaceTable")
'Code here loads table data into array
'Loop through each item in Array lists
For i = LBound(ReplaceArray, 1) To UBound(ReplaceArray, 2)
'Loop through each worksheet in ActiveWorkbook except data sheet
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "DataSheet" Then
ws.Cells.Replace What:=ReplaceArray(FindList, i), Replacement:=ReplaceArray(ReplaceList, i), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
End If
Next ws
Next i
Dim ws As工作表
Dim FindList尽可能长,ReplaceList尽可能长
作为ListObject的Dim tbl
作为变量的数组
Dim j尽可能长
'指向表的变量
Set tbl=工作表(“数据表”)。列表对象(“替换表”)
'此处的代码将表数据加载到数组中
'循环遍历数组列表中的每个项
对于i=LBound(ReplaceArray,1)到UBound(ReplaceArray,2)
'循环浏览Active工作簿中的每个工作表(数据表除外
对于ActiveWorkbook.Worksheets中的每个ws
如果ws.Name是“数据表”,那么
ws.Cells.Replace What:=ReplaceArray(FindList,i),Replacement:=ReplaceArray(ReplaceList,i)_
LookAt:=xlPart,SearchOrder:=xlByRows,MatchCase:=False_
SearchFormat:=False,ReplaceFormat:=False
如果结束
下一个ws
接下来我
理想输出是表内查找列表中定义的值,除包含该表的工作表外,所有工作表上的替换列表中的值都将被替换。您是否100%确定包含查找/替换表的工作表名为
“数据表”
?工作表名称前后是否可能出现空格,使其实际上是“数据表”
或“数据表”
?这会造成问题。您可以通过执行MsgBox“x”&ws.Name&“x”
检查是否存在空白,然后根据需要进行更正来查找。也可以使用可能更可靠的代码名。可能尝试对应用程序中的每个ws使用。工作簿(“WorkbookName”)。工作表而不是ActiveWorkbook中的每个ws使用。工作表@busterScruggs,并告诉我它是否解决了您的问题!谢谢您的建议!我使用MessageBox方法确认没有空格,因此我们可以排除这一问题。代码名和Application.Workbooks的想法都是这样的:工作表的目标值被替换了,但是,包含引用替换数据的工作表也被替换了,所以它仍然没有跳过该工作表。它还开始使用ActiveWorkbook语法生成此结果,并且此宏打算应用于多个工作簿,这就是我试图避免将其硬编码到宏中的原因。再次感谢你!!今天早上我再次检查了宏,在将代码复制粘贴到新工作簿中后,它按预期执行。我不知道我在最初的工作手册中做错了什么,或者仅仅是因为finnicky的缘故,它是否是excel,但现在它100%起作用了!您是否100%确定包含查找/替换表的工作表名为“数据表”
?工作表名称前后是否可能出现空格,使其实际上是“数据表”
或“数据表”
?这会造成问题。您可以通过执行MsgBox“x”&ws.Name&“x”
检查是否存在空白,然后根据需要进行更正来查找。也可以使用可能更可靠的代码名。可能尝试对应用程序中的每个ws使用。工作簿(“WorkbookName”)。工作表而不是ActiveWorkbook中的每个ws使用。工作表@busterScruggs,并告诉我它是否解决了您的问题!谢谢您的建议!我使用MessageBox方法确认没有空格,因此我们可以排除这一问题。代码名和Application.Workbooks的想法都是这样的:工作表的目标值被替换了,但是,包含引用替换数据的工作表也被替换了,所以它仍然没有跳过该工作表。它还开始使用ActiveWorkbook语法生成此结果,并且此宏打算应用于多个工作簿,这就是我试图避免将其硬编码到宏中的原因。再次感谢你!!今天早上我再次检查了宏,在将代码复制粘贴到新工作簿中后,它按预期执行。我不知道我在最初的工作手册中做错了什么,或者仅仅是因为finnicky的缘故,它是否是excel,但现在它100%起作用了!