VBA实现数据库中的字段处理(下划线去掉,后面的字母变大写)之版本1.0。

 

可以处理一列数据,数据从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 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值