【问题标题】:VBA Find Replace Based on Cell ValuesVBA根据单元格值查找替换
【发布时间】:2018-03-06 21:40:32
【问题描述】:

我不知道下面的代码有什么问题,正在寻找解决方案或任何提示。

目标是在 2 个单独的工作表中命名 8 个单独的范围,并创建一个查找和替换功能。

  • 4 个范围是 Excel 图表的一部分,该图表使用索引匹配公式,因此需要查找和替换函数来更新其值。
  • 剩余的 4 个范围只是 4 个单元格,我用来引用公式中要查找的内容并将其替换为(topFind、topReplace、subFind 和 subReplace)。

工作表也已命名,但在引用前 4 个 Excel 范围(topAR、topExp、subAR 和 subExp)时收到错误消息,无法使用“查找和替换”功能。

我欢迎您提供任何帮助。提前谢谢!

Sub FindReplace()

Dim topAR, topExp, subAR, subExp As Range
Dim topFind As Variant, topReplace As Variant
Dim subFind As Variant, subReplace As Variant
Dim wsTop As Worksheet, wsSub As Worksheet

wsTop = Workbook.Sheets("Top-20")
wsSub = Workbook.Sheets("Top US Sub-IG")

Set topAR = wsTop.Range.Cells("C8:E28")
Set topExp = wsTop.Range.Cells("M8:O28")
Set subAR = wsSub.Range.Cells("D7:F22")
Set subExp = wsSub.Range.Cells("L7:N22")

topFind = wsTop.cell.Location("H2")
topReplace = wsTop.cell.Location("I2")
subFind = wsSub.cell.Location("H2")
subReplace = wsSub.cell.Location("I2")

Range.topAR.Replace What:="topFind", Replacement:="topReplace", LookAt:= _
    xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False



Range.topAR.Replace What:="subFind", Replacement:="subReplace", LookAt:= _
    xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, 
ReplaceFormat:=False

End Sub

【问题讨论】:

  • 从“设置”工作表对象开始:set wsTop = Workbook.Sheets("Top-20") / Set wsSub = Workbook.Sheets("Top US Sub-IG")
  • 显式“Dim”所有变量,否则未显式声明的值将被视为 Variant 类型:Dim topAR As Range, topExp As Range, subAR As Range, subExp As Range

标签: vba excel excel-formula


【解决方案1】:

您必须采用正确的语法来引用 Range 对象

也许这就是你所追求的

Sub FindReplace()

    Dim topAR As Range, topExp As Range, subAR As Range, subExp As Range
    Dim topFind As Variant, topReplace As Variant
    Dim subFind As Variant, subReplace As Variant
    Dim wsTop As Worksheet, wsSub As Worksheet

    Set wsTop = ActiveWorkbook.Sheets("Top-20")
    Set wsSub = ActiveWorkbook.Sheets("Top US Sub-IG")

    Set topAR = wsTop.Range("C8:E28")
    Set topExp = wsTop.Range("M8:O28")
    Set subAR = wsSub.Range("D7:F22")
    Set subExp = wsSub.Range("L7:N22")

    Set topFind = wsTop.Range("H2")
    Set topReplace = wsTop.Range("I2")
    Set subFind = wsSub.Range("H2")
    Set subReplace = wsSub.Range("I2")

    topAR.Replace What:=topFind.Value, Replacement:=topReplace.Value, LookAt:= _
xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    subAR.Replace What:=subFind.Value, Replacement:=subReplace.Value, LookAt:= _
xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

End Sub

【讨论】:

  • 感谢您的建议。我尝试逐步运行代码,但在“Set wsTop = Workbook.Sheets("Top-20")”处收到一条错误消息,说明“需要对象”。你认为这是因为我需要先在 Excel 中命名范围吗?
  • 它现在给出“下标超出范围”。您是否认为这是因为 Excel 无法识别,因为我在工作簿中有 10 多个工作表?
  • 它在 Set wsTop = ActiveWorkbook.Sheets("Top-20") 中抛出错误。
  • 则表示活动工作簿没有任何以“Top-20”命名的工作表。如果您使用多个工作簿,最好明确引用工作簿的名称,例如 Set wsTop = WorkBooks("MyWorkbookName").Sheets("myWorkSheetName")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2019-03-27
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多