Vba求助,懂得来帮忙,谢谢

我要把第一列(A列)作如图所示的分裂然后写了如下代码:Functionbreakdown(rngAsRange,OptionalstyleAsByte=1)AsStrin... 我要把第一列(A列)作如图所示的分裂
然后写了如下代码:
Function breakdown(rng As Range, Optional style As Byte = 1) As String '对系统导出的数据分列,有两个参数,第二参数为可选,表示取分裂后的第几列,第一参数为单元格引用
Application.Volatile '声明易失性函数
On Error Resume Next '防错
Dim i As Integer, str As String '声明两个变量
str = Split(rng.Text, ",")(WorksheetFunction.RoundUp(style / 3, 0) - 1) '将单元格的值以逗号为分隔符转换成一维数组,再从数组中取字符串赋值给变量str,取值位置取决于第二参数
If style Mod 3 = 1 Then
For i = 1 To Len(str) '遍历str的每一字符
If IsNumeric(Mid(str, i, 1)) Then Exit Function '如果遇到数字,就结束过程
breakdown = breakdown & Mid(str, i, 1) '将取出的所有字符串联起来作为函数的返回值
Next i
ElseIf style Mod 3 = 2 Then
For i = 1 To Len(str)
If VBA.IsNumeric(Mid(str, i, 1)) Or Mid(str, i, 1) = "." Then breakdown = breakdown & Mid(str, i, 1) '如果遇到数字,就结束过程或小数点就取出并串联起来作为函数的返回值
Next i
ElseIf style Mod 3 = 0 Then
For i = Len(str) To 1 Step -1 '遍历str的每一字符(从右向左)
If IsNumeric(Mid(str, i, 1)) Then Exit Function
breakdown = Mid(str, i, 1) & breakdown
Next i
End If
If Err <> 0 Then breakdown = "" '如果有错误就返回空白
End Function

在代码调试过程中在下面的这句代码出现了错误,由于本人初涉VBA,没能找到原因,希望各位有识之士能出来帮我修改一下,谢谢
str = Split(rng.Text, ",")(WorksheetFunction.RoundUp(style / 3, 0) - 1) '将单元格的值以逗号为分隔符转换成一维数组,再从数组中取字符串赋值给变量str,取值位置取决于第二参数
展开
 我来答
姓王的wy451

2012-06-13 · TA获得超过48.3万个赞
知道大有可为答主
回答量:8万
采纳率:78%
帮助的人:8678万
展开全部
我认真看了你的程序,应该没错,估计是调用这个函数的上一级传递来的变量 style 数值大于原数据可分裂的列数,如分裂你图片中的第二行,如果style大于6就会出问题。如果不是这个问题,那就是逗号产生的问题,程序中是半角逗号,A1单元格中可能是中文逗号,所以数组并没有把字符串分开。你可选中A列,用查找替换方式把所有中文逗号改成西文逗号就行了。
另外问一下,你是为了学习编程还是为了完成工作,如果为了快速完成工作,不需要调用自定义函数这么复杂。要不要我帮你修改一下程序?
科洛斯魔影
2012-06-18
知道答主
回答量:5
采纳率:0%
帮助的人:3.6万
展开全部
给你另外一个思路,分割汉字、数字、字母:
Dim str as String '包含汉字、数字、字母的字符串
If Asc(str) < 0 Then ... '提取汉字
If str Like "[a-z,A-Z]" Then ... '提取字母
If str Like "#" Or str = "." Then ... '提取数字
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式