2017-08-25 68 views
1

我有以下代码:VBA:基于细胞addess设置一个变量为一个范围

Sub findReplace() 
Dim myArray As Variant, rng As Range, str As Variant, cAdd2 As Range 


myArray = Array("è", "é", "ë", "ê", "í", "?", "ñ", "ò", "ó", "ô", "ö", "à", "ã", "á", "Á", "ä", "ü", "â", "ø", "š", "??", ">", "<", "+", "*", "^", "ß", "ç", "å", "æ", ".", ";", "#", ":", "'", "-", "@", "Ã", "¨", "É", "Ô", "[", "]", "Ó", "Ñ", "(", ")", "Ö") 

Set rng = Workbooks("User").Sheets("Result").Range("B2:B10") 


For Each cell In rng 
    cAdd = cell.Address 
    Set cAdd2 = Range(cell.Address) 
    For Each str In myArray 
     If InStr(cell, str) Then 
      cAdd2.Offset(, 1).Formula = "=Substitute(" & cAdd & ", " & str & ",""_"")" -->**# This is where I get my error** 
     Else 
      cAdd2.Offset(, 1) = "=(" & cAdd & ")" 
     End If 
    Next str 
Next cell 


End Sub 

我希望能够做的就是去通过一系列的细胞,取代在任何字符我在那个单元格中的数组旁边有一个下划线,如果没有特殊字符,那么就复制它。

我相信问题是与cell.Address函数,但我不知道。

任何建议,高度赞赏!

谢谢!

+0

你是什么意思,你认为这个问题与该行有关?这是什么做错了? –

+0

它不会将单元格的实际地址存储为一个范围。当我查看变量中的值时,它实际上是该单元格中的字符串 – wra

+0

'cAdd2.Offset(,1).Formula =“=替换(”&cAdd&“,”&str&“,”“_” “)”'在这一行上,我得到一个“应用程序定义或对象定义的错误” – wra

回答

3

你可以试试这个。还将允许替换多于一个字符

Sub findReplace() 
    Dim myArray As Variant, rng As Range, str As Variant 
    Dim Form As String 

    myArray = Array("è", "é", "ë", "ê", "í", "?", "ñ", "ò", "ó", "ô", "ö", "à", "ã", "á", "Á", "ä", "ü", "â", "ø", "š", "??", ">", "<", "+", "*", "^", "ß", "ç", "å", "æ", ".", ";", "#", ":", "'", "-", "@", "Ã", "¨", "É", "Ô", "[", "]", "Ó", "Ñ", "(", ")", "Ö") 

    Set rng = Workbooks("User").Sheets("Result").Range("B2:B10") 

    For Each cell In rng 
     Form = "=(" & cell.Address & ")" 

     For Each str In myArray 
      If Not str = vbNullString Then 
       If InStr(cell, str) Then 
        If Len(Form) > 0 Then 
         Form = Replace(Form, cell.Address, "Substitute(" & cell.Address & ", """ & str & """,""_"")") ' -->**# This is where I get my error** 
        Else 
         Form = "=Substitute(" & cell.Address & ", """ & str & """,""_"")" 
        End If 
       End If 
      End If 
     Next str 
     cell.Offset(, 1).Formula = Form 
    Next cell 
End Sub 
+0

哇,完美的工作,并解决了我遇到的另一个问题!非常感谢! – wra

1

与该行的错误是在我的意见,但这个会更快,因为它只有一个循环,并取代所有的特殊字符,而不是仅在过去的发现为@Flephal说:

Sub findReplace() 
Dim myArray As Variant, rng As Range, str As Variant 


myArray = Array("è", "é", "ë", "ê", "í", "?", "ñ", "ò", "ó", "ô", "ö", "à", "ã", "á", "Á", "ä", "ü", "â", "ø", "š", "??", ">", "<", "+", "*", "^", "ß", "ç", "å", "æ", ".", ";", "#", ":", "'", "-", "@", "Ã", "¨", "É", "Ô", "[", "]", "Ó", "Ñ", "(", ")", "Ö") 

Set rng = Workbooks("User").Sheets("Result").Range("B2:B10") 

rng.Offset(, 1).Value = rng.Value 
For Each str In myArray 
    rng.Offset(, 1).Replace str, "_" 
Next str 

End Sub 

测试:

Sub findReplace() 
Dim myArray As Variant, rng As Range, str As Variant 


myArray = Array("E", "S", "!", ")") 
Set rng = ActiveSheet.Range("B2:B10") 

rng.Offset(, 1).Value = rng.Value 
For Each str In myArray 
    rng.Offset(, 1).Replace str, "_" 
Next str 

End Sub 

enter image description here

+0

这只会用一个下划线代替任意数量的字母 – Tom

+0

嘿斯科特,感谢您的帮助!为什么我必须在数组变量中加上三个引号,但没有其他原因,是否有原因?这仅仅是一个vba规则? – wra

+0

不,如果字符串有多个,它会用'_'来代替它,它会一次替换一个。它会为每个字母一次完成整个范围。 –

相关问题