【问题标题】:VBA (Microsoft Excel) replace Array with StringVBA(Microsoft Excel)用字符串替换数组
【发布时间】:2016-08-02 08:37:14
【问题描述】:

我知道这是完全错误的,但目前我真的不知道该怎么做。

在 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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您的代码应进行细微更改: 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
    

    【讨论】:

    • 不错的一个。不知道函数 LBound & Ubound (据我所知,它们的存在是为了在数组上创建循环搜索?),所以我不知道如何让它工作。
    • 与数组一起使用时,它们指的是上下索引边界,因此Array("old1","old2","old3") 的数组 - LBound 将为 0,UBound 将为 2
    • @MiguelRasquinho 或者,您可以使用变体类型的变量和 For Each 循环来迭代数组。 Dim x as Variant: For Each x in OldValues
    • 谢谢你们!它按预期工作,现在我可以正确理解 LBoundUBound
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多