2011-03-28 113 views
0

我目前的工作中,我創建了一個按鈕來查找和替換根據用戶輸入,其中用戶提供一個新的硬件名稱在工作表中的值,Excel的VBA項目,一數量和需要更新新值的工作表名稱。硬件名稱是唯一值,因此數量的更新應根據硬件名稱進行。查找和替換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 

請任何輸入將不勝感激......

謝謝。

+0

沒有什麼可以連接您的兩個替換操作:第一個只查找名稱,第二個查找數量。你最好循環遍歷行並找到名稱的每個實例,然後檢查同一行上的數量...... – 2011-03-28 04:56:47

回答

0

這裏的問題是,你正在做兩個獨立和獨立的搜索/替換操作。結果將與您所描述的完全一致,所有匹配的值將被替換爲qOldText。當您搜索sOldText回報對單元格引用找到

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

然後相對於位於小區的小區在服務小區和qOldText更換sOldText

正確的做法是。數量單元格的位置必須取決於工作表佈局。例如,如果它在同一行,下一列使用:

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

從你的問題這似乎qOldText有沒有用,除非有財產以後我已經錯過了。

+0

非常感謝你...... :) – suprasad 2011-03-28 05:57:49