VBA - Заменить на поиск одного слова в определенной c ячейке работает, как мне найти то или иное слово? - PullRequest
0 голосов
/ 14 июля 2020

Сначала я должен извиниться за мои очень ограниченные навыки программирования на VBA. Итак, код, который у меня есть, в основном делает то, что я хочу: у меня есть сотни файлов Excel, которые мне нужно постоянно изменять за раз. Если в определенной c ячейке («B1») есть строка слов «draw», ничего не должно происходить. Если в ячейке нет строки слов «рисовать», перед словом «подготовка» в ячейке следует вставить слово «резервуар». Макрос просматривает все файлы в данной папке, изменяет формат, выводит в новую папку и т. Д. c. Все это прекрасно работает. Но иногда ячейка может содержать строку слов «пул» вместо «ничья». В этом случае я вообще не хочу менять содержимое ячейки. В общем, если в ячейке есть «пул» или «ничья», ничего не делать. Если их обоих нет, добавьте в ячейку строку «Tank» перед строкой слова «prepare». Вот код, который у меня есть:

Sub SIS_ALIMS()

Dim wbOpen As Workbook
Dim MyDir As String
MyDir = "C:\Processed data"
strExtension = Dir(MyDir & "\*.xls")
While strExtension <> vbNullString
Set wbOpen = Workbooks.Open(MyDir & "\" & strExtension)
With wbOpen

Set rgFound = Range("B1").Find("draw", MatchCase:=False)

If rgFound Is Nothing Then

Range("B1").replace What:="prep", Replacement:="Tank prep"

Else

End If

Dim SaveName As String
    SaveName = ActiveSheet.Range("B8").Text
    ActiveWorkbook.SaveAs fileName:="C:\Processed data\ALIMS data\" & _
    SaveName & ".txt"

.Close SaveChanges:=False

End With
strExtension = Dir
Wend

Application.ScreenUpdating = True

End Sub

1 Ответ

0 голосов
/ 14 июля 2020

Сначала наблюдение: ваш код не определяет рабочий лист в wbOpen, поэтому вы можете столкнуться с проблемами, если книга не открывается на ожидаемом вами листе. Лучше использовать что-то вроде With wbOpen.Sheets(1).

Что касается вашего вопроса, вместо использования Find вам может быть проще работать со значением ячейки как строковой переменной:

Dim CellData As String
    
With wbOpen.Sheets(1)
    CellData = .Range("B1").Value
        
    If CellData = "draw" Or CellData = "pool" Then
        'do nothing
            
    ElseIf CellData = "prep" Then
        .Range("B1").Value = "Tank prep"
            
    Else
        'add other conditionals as needed
            
    End If
        
End With

Наконец, если VBA не нужно выполнять какие-либо действия, когда значение ячейки равно «draw» или «pool», то тестирование этих значений излишне. Блок If ... End If можно заменить только интересующим условием:

If .Range("B1").Value = "prep" Then .Range("B1").Value = "Tank prep"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...