这是我第一次使用VBA和Excel,我的问题可能是由于我缺乏知识。
我有一个城市名称的列列表(包含800个项目,因此我希望自动替换它们)和一些文本块,其中术语“cityname”多次出现,需要使用正确的城市名称替换,在我的设置中,该名称将是同一行中第一个列单元格的值。
所以我发现了这个:How to iterate through all the cells in Excel VBA or VSTO 2005
通过查看Excel VBA参考找到 InStr 和替代函数。
使用像这样的迭代可以正常工作:
Sub MySubstitute()
Dim cell As Range
For Each cell In ActiveSheet.UsedRange.Cells
If InStr(cell.Value, "cityname") > 0 Then
MsgBox "Hello World!"
End If
Next cell
End Sub
我的工作表中的每个“cityname”都有一个消息框(只有2行的测试表)。
然而,当我添加我真正想要实现的内容时,我得到运行时错误(1004):
Sub MySubstitute()
Dim cell As Range
For Each cell In ActiveSheet.UsedRange.Cells
If InStr(cell.Value, "cityname") > 0 Then
cell.Value = WorksheetFunction.Substitute(cell.Value, "cityname", Cells(cell.Row, A))
End If
Next cell
End Sub
所以我想这行中的某些内容是错误的,但我无法弄清楚是什么。任何关于我的错误的提示都表示赞赏,谢谢:)
答案 0 :(得分:2)
您可以使用Range.Replace方法并立即替换所有,无需迭代。
Sub MySubstitute()
Dim rng As Range
Set rng = ActiveSheet.UsedRange.Cells
rng.Replace "cityname", "correctcityname", xlPart
End Sub
答案 1 :(得分:1)
你应该改变:
cell.Value = WorksheetFunction.Substitute(cell.Value, "cityname", Cells(cell.Row, A))
通过
cell.Value = WorksheetFunction.Substitute(cell.Value, "cityname", Cells(cell.Row, 1))