我尝试过的场景:
This is the look and feel of my macro project
从上图中,Range(F4)字符串值为" GREEN"然后我不想在范围范围(G4)中看到下周的动作,因为我使用了下面的剧本,但是由于我无法看到角色被删除而失败了。
If ThisWorkbook.Sheets("FortnightlyWSR").Cells(I, 6).Value = "GREEN" Then
ThisWorkbook.Sheets("FortnightlyWSR").Range("G4").Characters(WorksheetFunction.Find("Action Plan for next Week:", ThisWorkbook.Sheets("FortnightlyWSR").Range("G4").Value, 1), Len("Action Plan for next Week:")).Delete
答案 0 :(得分:0)
我认为您的代码没有太大问题,但对WorksheetFunction对象的FIND function的调用当然可以替换为VBA的原生InStr function。一些用于保持弦乐和起始位置的vars简化了事情。 With ... End With statement将父工作表引用带到单个本地化位置。
Dim sp As Long, ln As Long, i As Long, str As String
i = 4
str = "Action Plan for next Week:" & Chr(10)
With ThisWorkbook.Sheets("FortnightlyWSR")
If UCase(.Cells(i, 6).Value2) = "GREEN" Then
sp = InStr(1, .Range("G4").Value, str, vbTextCompare)
.Range("G4").Characters(Start:=sp, Length:=Len(str)).Delete
End If
End With
我在字符串的尾端添加了换行符,这样就不会留下空白行。
FIND function执行区分大小写搜索; SEARCH function的子字符串位置不区分大小写。 子>
答案 1 :(得分:0)
您发布的代码将从G4单元格中删除字符串“下周的行动计划:”,并保留剩余的字符串。
经测试的代码 - 将I替换为4以匹配F4
If ThisWorkbook.Sheets("FortnightlyWSR").Cells(I, 6).Value = "GREEN" Then
ThisWorkbook.Sheets("FortnightlyWSR").Range("G4").Characters(WorksheetFunction.Find("Action Plan for next Week:", ThisWorkbook.Sheets("FortnightlyWSR").Range("G4").Value, 1), Len("Action Plan for next Week:")).Delete
End If
但是如果你想删除它下面的任何值(来自图像打印解决方案..,测试策略..启用测试场景..)那么你可以使用下面的代码
I = 4
If ThisWorkbook.Sheets("FortnightlyWSR").Cells(I, 6).Value = "GREEN" Then
ThisWorkbook.Sheets("FortnightlyWSR").Range("G4").Characters(WorksheetFunction.Find("Action Plan for next Week:", ThisWorkbook.Sheets("FortnightlyWSR").Range("G4").Value, 1)).Delete
End If