2016-08-02 96 views
1

我知道这是完全错误的,但此刻,我真的不知道该怎么做。VBA(Microsoft Excel)将字符串替换为字符串

在Microsoft Excel中,我想通过固定字符串“NewValue”替换“OldValues”字符串上的所有值。这怎么可能?

LBound和Ubound被错误地使用,对吧?

Sub Replace() 
Dim sht As Worksheet 
Dim OldValues As Variant 
Dim NewValue As String 
Dim x As Long 

OldValue = Array("old1","old2","old3") 
NewValue = "allnew!" 

    For x = LBound(OldValue) To UBound(NewValue) 

     For Each sht In ActiveWorkbook.Worksheets 
     sht.Cells.Replace What:=OldValue(x), Replacement:=NewValue(x), _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ 
      SearchFormat:=False, ReplaceFormat:=False 
     Next sht 

    Next x 

End Sub 

回答

4

您的代码应与小的改动来工作: NewValue不是一个数组,所以UBound(NewValue)将让你一个错误。您必须在循环中上升到UBound(OldValues),并在Replace之后的NewValue之后删除(x)

Sub Replace() 
Dim sht As Worksheet 
Dim OldValues As Variant 
Dim NewValue As String 
Dim x As Long 

OldValues = Array("old1","old2","old3") 
NewValue = "allnew!" 

    For x = LBound(OldValues) To UBound(OldValues) 

     For Each sht In ActiveWorkbook.Worksheets 
     sht.Cells.Replace What:=OldValues(x), Replacement:=NewValue, _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ 
      SearchFormat:=False, ReplaceFormat:=False 
     Next sht 

    Next x 

End Sub 
+0

不错的一个。不知道LBound&Ubound的函数是否正确(据我了解,它们的存在是为了在数组上创建循环),所以我不知道如何使它工作。 –

+1

当与一个数组一起使用时,它们指向上下的索引边界,所以对于Array(“old1”,“old2”,“old3”)的数组,'LBound'将为0,UBound将为2 – Jordan

+0

@MiguelRasquinho也可以使用变量类型的变量和For Each Loop循环遍历数组。 'Dim x as Variant:For Each x in OldValues' – 2016-08-02 09:00:28