VBA-替换为在特定单元格中查找一个单词有效,如何查找一个或另一个单词



首先,我应该为我有限的VBA编码技能道歉。因此,我的代码基本上完成了我想做的事情:我有数百个Excel文件需要一次重复修改。如果特定单元("B1"(具有字串"B1";draw";在这里面,什么都不会发生。如果该单元没有单词串";draw";,单词";储罐";要插入单词"之前;prep";在细胞中。宏运行在给定文件夹中的所有文件中,更改格式,输出到新文件夹,等等。这一切都很好。但有时,单元格可能包含单词串";池";而不是";绘制";。在这种情况下,我根本不想更改单元格内容。所以基本上,如果";池";或";draw";在牢房里,什么也不做。如果它们都不存在;Tank";在字符串"之前;prep";在细胞中。这是我的代码:

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 dataALIMS data" & _
SaveName & ".txt"
.Close SaveChanges:=False
End With
strExtension = Dir
Wend
Application.ScreenUpdating = True
End Sub

首先是一个观察:您的代码没有在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在单元格值为"0"时不需要执行任何操作;draw";或";池,";那么对这些值的测试是多余的。If ... End If块可以只替换为感兴趣的条件:

If .Range("B1").Value = "prep" Then .Range("B1").Value = "Tank prep"

最新更新