【问题标题】:Find and replace excel VBA trouble查找和替换excel VBA麻烦
【发布时间】:2012-09-14 04:04:36
【问题描述】:

我目前正在处理一个 Excel VBA 项目,在该项目中我创建了一个按钮,用于根据用户输入查找和替换工作表中的值,用户将在其中提供新的硬件名称、数量和工作表名称新值需要更新。硬件名称是唯一值,因此数量的更新应根据硬件名称进行。

我面临的问题是,当我尝试更新值时,硬件名称正在正确更新,但是在更新数量时,它不仅更新了该特定硬件名称的数量,而且更新了所有与旧数量相匹配的数量。

代码如下所示:

If .ComboBox1.Value <> vbNullString Then
         sName = .ComboBox1.Text 'is combobox name

         If Len(.OldHW.Value) > 0 And Len(.NewHW.Value) > 0 Then
             sOldText = .OldHW.Text 'OldHW and NewHW are textbox names
             sNewText = .NewHW.Text         

             With Worksheets(sName)
                 .Cells.replace what:=sOldText, Replacement:=sNewText, LookAt:=xlWhole, _
                     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                     ReplaceFormat:=False                         

             End With
         End If


        If Len(.Oldqty.Value) > 0 And Len(.Newqty.Value) > 0 Then
            qOldText = .Oldqty.Text
           qNewText = .Newqty.Text

             With Worksheets(sName)
                 .Cells.replace what:=qOldText, Replacement:=qNewText, LookAt:=xlWhole, _
                     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                     ReplaceFormat:=False

             End With
         End If    
     End If
 End With

任何意见将不胜感激...

谢谢。

【问题讨论】:

  • 没有什么可以连接您的两个替换操作:第一个只是查找名称,第二个查找数量。您最好遍历行并找到名称的每个实例,然后检查同一行上的数量...

标签: vba excel


【解决方案1】:

这里的问题是您正在执行两个单独且独立的搜索/替换操作。结果将与您描述的完全一样,所有匹配的qOldText 值都将被替换。

正确的方法是当您搜索 sOldText 时返回对它找到的单元格的引用

Set oCell = Nothing
Set oCell = sName.UsedRange.Find what:=sOldText, LookAt:=xlWhole, _
                 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False

然后替换定位单元格中的 sOldText 和相对于定位单元格的单元格中的 qOldText。数量单元格的位置必须取决于工作表布局。例如,如果它在同一行,下一列使用:

If Not oCell is Nothing then
    oCell =  sNewText 
    oCell.Offset(0,1) = qNewText
End If

从你的问题来看,qOldText 似乎没有用,除非我错过了什么。

【讨论】:

    猜你喜欢
    • 2013-07-15
    • 2014-10-12
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    相关资源
    最近更新 更多