可以处理一列数据,数据从B6位置开始,中间不能有空,遇到空就判断到了最后一个,跳出循环!
1.0版本中有两个问题,现在已经修正了
'履历 '2010/10/23(周六)下午第一版做成 '2010/10/26(周二)晚上,对于两个问题进行了修改(1不含有下划线的情况,2开头字母不应大写)
修正在V1.1版本中(这里没有做任何修改)
以下是1.1版本的链接
http://blog.csdn.net/sxzlc/archive/2010/10/26/5967663.aspx
'版权所属:SUN 2010/10/23
Private Sub underLine_Click()
'版权所属:SUN 2010/10/23
'数据库中的列名
Dim dbColumnStr As String
'开始的位置,由横竖坐标确认
Dim index As Integer
Dim rangeStr
'行(横)
index = 6
'列(竖)
rangeStr = "B"
'生成单元个位置,这里没有自动装箱,所以要用一个函数把数字转换一下
rangeStr = rangeStr + CStr(index)
'单元个位置生成正确与否,测试用
'MsgBox rangeStr
'判断不为空,注意这里要用""空串,而不能使用null,null时永远false
Do While Sheet1.Range(rangeStr).Value <> ""
'进入循环测试用
'MsgBox rangeStr
'Excel中的数据(数据库中的列名)
dbColumnStr = Sheet1.Range(rangeStr).Value
'调用对数据库中列明处理的函数
Call underLineEscape_upcase(dbColumnStr)
'处理之后位置,稍微往右移动一下
rangeStr = "C"
'通过横竖两个坐标,组合出生成的位置
rangeStr = rangeStr + CStr(index)
'输出处理之后的数据
Sheet1.Range(rangeStr).Value = dbColumnStr
'读取下一个数据
index = index + 1
'源数据的位置还要变回来
rangeStr = "B"
'通过横竖两个坐标,组合出源数据的位置
rangeStr = rangeStr + CStr(index)
Loop
MsgBox "end"
'版权所属:SUN 2010/10/23
End Sub
'发现下划线,去掉,得到以下划线分割的字符串 (不知道是否有java中split的功能)
Sub underLineEscape_upcase(ByRef dbColumnStr As String)
'版权所属:SUN 2010/10/23
'存放分割后组合的字符串
Dim str As String
'存放每一个分割的字符串
Dim splitStr As String
'初始化一下
str = ""
'在VBA中,字符串索引从1开始
Dim index
'如果返回的不是0,就表明查到数据了,则继续循环
Dim flag
'初始化开始位置
index = 1
'初始化flag
flag = 1
'获取字符串长度
length = Len(dbColumnStr)
'获取第一个"_"的位置,不在循环里面
index = InStr(index, dbColumnStr, "_")
'当没有找到 flag=0,或 超过长度时,退出循环
Do While (flag <> 0 And index <= length)
'获取字符串中"_"的位置
index = InStr(index, dbColumnStr, "_")
'如果最后一次没有查到那么index=0,而之前还查到了(一次也没有的情况不会进入循环),
'这时flag中,保存的还是是上一个"_"的位置,但是由于下面的判断flag不等于一时会加一
'所以,这里还要加一,否则最后一个串会少一个长度
If index = 0 Then index = length + 1
'如果是从找到"_"的位置开始需要加1,因为flag存的是"_"的位置
If flag <> 1 Then flag = flag + 1
'获取字符串,以"_"分割
splitStr = Mid(dbColumnStr, flag, index - flag)
'把第一个字母变成大写
Call firstCharToUpcase(splitStr)
'测试时使用
'MsgBox splitStr
'把每一个分割后并且转换为大写的字符串组合起来
str = str + splitStr
'因为有0的判断,所以不能加1。同时在上面还有使用,这样就不用再定义一个临时变量存index了
flag = index
'改变下一个索引开始的位置,也就是"_"之后那个字母的索引
index = index + 1
Loop
'分割后的字符串,因为是应用传值,这里就相当于return
dbColumnStr = str
'版权所属:SUN 2010/10/23
End Sub
'把字符串中的第一个字母变成大写
Sub firstCharToUpcase(ByRef str As String)
'版权所属:SUN 2010/10/23
Dim tempStr
Dim length
'获取长度
length = Len(str)
'为了保留小写部分,使用后两位
tempStr = str
'使用转换为大写的第一位
str = StrConv(str, vbUpperCase)
'把第一位和后两位拼接起来
str = Mid(str, 1, 1) + Mid(tempStr, 2, length)
'版权所属:SUN 2010/10/23
End Sub