2017-08-25 35 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

不,如果字符串有多個,它會用'_'來代替它,它會一次替換一個。它會爲每個字母一次完成整個範圍。 –

相關問題