【发布时间】:2017-03-24 10:47:40
【问题描述】:
我有这样的输入:
gen,N,,,GONGD,,,N,,,KL,0007bd,,,,,,,,TAK,
gen,N,,,RATEC,,,N,,,KP,0007bc,,,,,,,,TAZ,
kap,N,,,EBFWE,N,,,,,,,,,KP,002bd4,,,KP,123000,,,,,N,,,,P
kap,N,,,ST,WEIT,E3,EBFWEI,,,KP,002bd2,N,,,,,,KP,002bd3,,,,,,,Z,MG00,,,,,N,,,,P
我有这样的代码:
Sub Find()
Dim rFoundAddress As Range
Dim sFirstAddress As String
Dim x As Long
With ThisWorkbook.Worksheets("Sheet1").Columns(1)
Set rFoundAddress = .Find("kap,*", LookIn:=xlValues, LookAt:=xlWhole)
If Not rFoundAddress Is Nothing Then
sFirstAddress = rFoundAddress.Address
Do
Dim WrdArray() As String
Dim text_string As String
Dim i As String
Dim k As String
Dim num As Long
text_string = rFoundAddress
WrdArray() = Split(text_string, "KP,")
i = Left(WrdArray(1), 6)
k = Left(WrdArray(2), 6)
Columns("A").Replace What:=i, _
Replacement:=k, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False, _
SearchFormat:=False, _
ReplaceFormat:=False
Set rFoundAddress = .FindNext(rFoundAddress)
Loop While Not rFoundAddress Is Nothing And _
rFoundAddress.Address <> sFirstAddress
End If
End With
End Sub
我正在尝试做的事情: 查找所有以“kap”开头的行,并将第一个“KP”之后的 6 个字符/int 保存为 i,将第二个“KP”之后的 6 个 chars/int 保存为 k。然后搜索整个数据集(A 列中的数百行)是否包含字符串 i,如果是,则将其替换为字符串 k。并循环这个。所以它会对以“kap”开头的另一行做同样的事情。该代码给了我错误消息:第二次涉及“列(“A”)...”时下标超出范围。你能帮帮我吗?
提前致谢
【问题讨论】:
-
是的,我们可以帮助您,但这是your post of yesterday 的扩展,所以请将您的修改移到那里。谢谢。
-
@PierreChevallier 嗨!这样做的常见方法是什么?只需用这个编辑我昨天的问题吗?或作为新评论或如何?谢谢
-
评论您之前的帖子,说明您遇到的错误是什么,如果用户的回答提供了它,请在用户的评论部分回复,以便她/他可以帮助您。
-
@PierreChevallier 好的,它就在那里。我会在 5 分钟内删除这个问题。谢谢
-
这个问题在另一个用户的建议下在这里重新打开。谢谢。
标签: vba replace error-handling