vba函数提示数组下标越界

PrivateSubWorksheet_Change(ByValTargetAsRange)Dims()AsStrings=Split(Cells(Target.Row,... Private Sub Worksheet_Change(ByVal Target As Range)
Dim s() As String
s = Split(Cells(Target.Row, Target.Column), ".")
Cells(Target.Row, Target.Column) = s(1)
End Sub
输入字符串时 提示下标越界(输入没问题的)
展开
 我来答
geral
2014-06-08 · TA获得超过735个赞
知道小有建树答主
回答量:399
采纳率:0%
帮助的人:210万
展开全部
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s() As String
If InStr(s, ".") <> 0 Then
s = Split(Cells(Target.Row, Target.Column), ".")
Cells(Target.Row, Target.Column) = s(1)
End If
End Sub
追问
为什么少了判断以后就报错,无论输入是否合法
追答
因为在Cells(Target.Row, Target.Column) = s(1)这一句里,改变了单元格的值,比如原来是123.456.经过这一句代码之后会变为456,这样就重新出发了worksheet_change函数,函数重新执行的结果就是会对“456”而不是“123.456”进行处理, 处理“456”得出的数组只有一个s(0),没有s(1),所以就提示下标越界
willenhu
2014-06-08 · TA获得超过1772个赞
知道小有建树答主
回答量:865
采纳率:66%
帮助的人:251万
展开全部
s = Split(Cells(Target.Row, Target.Column), ".")
s数组里有几个元素,是不是只有1个元素,这样下一句s(1)就会出现下标越界了。
另外,你输入字符串2.3.2.2试一下看看
追问
还是报错
追答
对了,你这样会出现死循环。
假设你在目标单元格输入了2.3.4,这个时候你的目标单元格数据就会变成3,这个时候会再次引发单元格变化事件,而此时你数组S就只有1个元素3了,所以s(1)就会溢出了。
你要为输入数据的单元格做一下标记,经过VBA处理过的数据就不能再次处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式