Excel 修改后的宏行为异常,工作和不工作

Excel 修改后的宏行为异常,工作和不工作,excel,vba,Excel,Vba,我使用的宏的新版本(尝试使其更快)在新的(原始的)工作簿中运行,但在 我的“工作”工作簿(有其他宏)仅当我运行原始宏时,新宏才会运行 ona字段,然后在它之后运行新宏,然后它在任何字段上工作 或者新宏在“工作”工作簿中工作,如果我关闭然后打开WB,然后运行新宏 这是唯一一个以这种方式运行的宏 有人能看出这是新宏的问题,还是我的“工作”工作簿中存在隐藏的问题或冲突 谢谢 Sub RemoveCharList() fRemoveCharList Array("field2", "field4", "

我使用的宏的新版本(尝试使其更快)在新的(原始的)工作簿中运行,但在

我的“工作”工作簿(有其他宏)仅当我运行
原始
宏时,新宏才会运行

ona字段,然后在它之后运行新宏,然后它在任何字段上工作

或者新宏在“工作”工作簿中工作,如果我关闭然后打开WB,然后运行新宏

这是唯一一个以这种方式运行的宏

有人能看出这是新宏的问题,还是我的“工作”工作簿中存在隐藏的问题或冲突

谢谢

Sub RemoveCharList()
fRemoveCharList Array("field2", "field4", "field5", "field7"), Array("]", "&", "%")
End Sub
新宏

Sub fRemoveCharList(ColArray As Variant, char As Variant)
Dim j As Long, Heading As Variant, headingFound As Range
For Each Heading In ColArray
Set headingFound = Range("1:1").Find(What:=Heading)
If Not headingFound Is Nothing Then
    With Range(headingFound, Cells(Rows.Count, headingFound.Column).End(xlUp))
        For j = LBound(char) To UBound(char)
            .Replace char(j), vbNullString
         Next
      End With
    End If
  Next
End Sub
原始宏

Sub fRemoveCharList(ColArray As Variant, char As Variant)

Dim x As Variant
Dim LR As Long, i As Long, j As Long
Dim Heading As Variant
Dim headingFound As Range
Dim lngColIndex As Long

For Each Heading In ColArray
    On Error Resume Next
    Set headingFound = Range("1:1").Find(What:=Heading, LookIn:=xlFormulas, LookAt:=xlPart)
    Err.Clear: On Error GoTo 0: On Error GoTo -1
    If Not headingFound Is Nothing Then lngColIndex = headingFound.Column
    'If headingFound.Column Then lngColIndex = headingFound.Column


  LR = Cells(Rows.Count, lngColIndex).End(xlUp).Row

  For i = 1 To LR
      With Cells(i, lngColIndex)
          x = .Value
          For j = LBound(char) To UBound(char)
              x = Replace(x, char(j), vbNullString)
          Next
          .Value = x
       End With
    Next i
  Next
End Sub

它总是一个好主意,告诉范围,它属于哪个表,否则它将采取主动表范围

循环不需要
(对于i=1到LR)遍历每个单元格并检查特殊字符,相反,代码可以搜索整个范围内的特殊字符(从第一个单元格到底部),并使用替换方法

我希望这些更改能使代码更快地工作

Sub fRemoveCharList(ColArray As Variant, char As Variant)


    Dim LR As Long, j As Long
    Dim Heading As Variant
    Dim headingFound As Range, rng As Range


    With ThisWorkbook.Sheets("Sheet1")
        For Each Heading In ColArray
            Set headingFound = .Rows("1:1").Find(What:=Heading, LookIn:=xlFormulas, LookAt:=xlPart)

            If Not headingFound Is Nothing Then

                LR = .Cells(.Rows.Count, headingFound.Column).End(xlUp).Row
                Set rng = .Range(headingFound, .Cells(LR, headingFound.Column))

                For j = LBound(char) To UBound(char)
                    rng.Replace char(j), vbNullString
                Next

            End If
        Next
    End With
End Sub

它总是一个好主意,告诉范围,它属于哪个表,否则它将采取主动表范围

循环不需要
(对于i=1到LR)遍历每个单元格并检查特殊字符,相反,代码可以搜索整个范围内的特殊字符(从第一个单元格到底部),并使用替换方法

我希望这些更改能使代码更快地工作

Sub fRemoveCharList(ColArray As Variant, char As Variant)


    Dim LR As Long, j As Long
    Dim Heading As Variant
    Dim headingFound As Range, rng As Range


    With ThisWorkbook.Sheets("Sheet1")
        For Each Heading In ColArray
            Set headingFound = .Rows("1:1").Find(What:=Heading, LookIn:=xlFormulas, LookAt:=xlPart)

            If Not headingFound Is Nothing Then

                LR = .Cells(.Rows.Count, headingFound.Column).End(xlUp).Row
                Set rng = .Range(headingFound, .Cells(LR, headingFound.Column))

                For j = LBound(char) To UBound(char)
                    rng.Replace char(j), vbNullString
                Next

            End If
        Next
    End With
End Sub

桑托什,谢谢你。你的回答总是对他们很友善。桑托什,谢谢你。你的回答对他们总是很友善。