Найти и заменить проблему Excel VBA - PullRequest
0 голосов
/ 28 марта 2011

В настоящее время я работаю над проектом 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

Пожалуйста, любые отзывы будут с благодарностью ...

Спасибо.

1 Ответ

0 голосов
/ 28 марта 2011

Проблема в том, что вы выполняете две отдельные и независимые операции поиска / замены.Результатом будет именно то, что вы описываете, все соответствующие значения qOldText будут заменены.

Правильный подход был бы при поиске sOldText возврата ссылки на найденную ячейку

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

Затем замените sOldText в расположенной ячейке и qOldText в ячейке относительнорасположенная ячейка.Положение ячейки Qty должно зависеть от макета листа.Например, если он находится в той же строке, используйте следующий столбец:

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

Из вашего вопроса может показаться, что qOldText бесполезен, если только я не пропустил что-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...