Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Excel 工作表循环未跳过所需工作表_Excel_Vba - Fatal编程技术网

Excel 工作表循环未跳过所需工作表

Excel 工作表循环未跳过所需工作表,excel,vba,Excel,Vba,我试图让宏在所有工作表上执行查找和替换功能,除了包含查找和替换值的表所在的工作表。但是,执行宏时,它会替换表中的值,而不会替换其余工作表中的值 我从一个网站上提取了以下代码: 因为他们试图实现我的目标,但没有成功。我的数据被修改了一点,因为最初我的数据格式不同,但我修改了它以匹配网站输入,尽管如此,它仍然不起作用 我尝试过使用Worksheets.Count方法,并使用I=2循环到ws\u Count,将find&replace表作为第一张工作表,但是这也失败了。我还尝试了一种选择案例的方法,

我试图让宏在所有工作表上执行查找和替换功能,除了包含查找和替换值的表所在的工作表。但是,执行宏时,它会替换表中的值,而不会替换其余工作表中的值

我从一个网站上提取了以下代码:

因为他们试图实现我的目标,但没有成功。我的数据被修改了一点,因为最初我的数据格式不同,但我修改了它以匹配网站输入,尽管如此,它仍然不起作用

我尝试过使用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%起作用了!