Why doesn't my VBA code work when the selection starts with a dot?

时间:2021-07-30 09:02:03

标签: excel vba replace

我创建了这个代码,如果有的话,它应该用点替换选择中的逗号。但是,如果选择以包含点的单元格开头,则代码不起作用,但如果以包含逗号的单元格开头,则代码有效。如果它以逗号开头,然后是带点的单元格,然后又是带逗号的单元格,它甚至可以工作。代码如下:

Public Sub DeleteDotsReplaceCommasWithDots()
        
For Each cell In Selection

    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    If InStr(ActiveCell.Value, ".") > 0 And InStr(ActiveCell.Value, ",") > 0 Then
        Selection.Replace What:=".", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
        Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    ElseIf InStr(ActiveCell.Value, ".") = 0 And InStr(ActiveCell.Value, ",") > 0 Then
        Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False, FormulaVersion:=xlReplaceFormul
    End If
    
Next cell

End Sub

知道为什么会这样吗?谢谢:)

1 个答案:

答案 0 :(得分:0)

您似乎是在 ActiveCell 上运行搜索/替换,而不是您使用 For..Each 循环遍历的每个单元格。我已经使用 With cell.. End With 块稍微整理了一下。

试试这个:

Public Sub DeleteDotsReplaceCommasWithDots()
        
    For Each cell In Selection
        With cell
            .Replace What:=" ", Replacement:="", LookAt:=xlPart, _
                    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
            If InStr(.Value, ".") > 0 And InStr(.Value, ",") > 0 Then
                .Replace What:=".", Replacement:="", LookAt:=xlPart, _
                    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
                .Replace What:=",", Replacement:=".", LookAt:=xlPart, _
                    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
            ElseIf InStr(.Value, ".") = 0 And InStr(.Value, ",") > 0 Then
                .Replace What:=",", Replacement:=".", LookAt:=xlPart, _
                    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula
            End If
        End With
    Next cell

End Sub
相关问题