当前位置:编程学习 > VB >>

vb编程有点错误

问题:输入字母和数字的组合,以#结束,求出其中的数字和字母个数

代码如下

Private Sub Command1_Click()
   i = 1
    n = Len(Text1.Text)
    m = 0
    a = 0
   
    Do While Asc(Mid(Text1.Text, 1, i)) = 35
    If Asc(Mid(Text1.Text, 1, i)) >= 48 And Asc(Mid(Text1.Text, 1, i)) <= 57 Then
      m = m + 1
   
    End If
    i = i + 1
    
    Loop
    a = n - m
    MsgBox "字母个数为" & a & "数字个数为" & m
   
   
   
End Sub

请问为什么不行啊

答案:楼主MID函数使用有误

 

Mid 函数

       

返回 Variant (String),其中包含字符串中指定数量的字符。

语法

Mid(string, start[, length])

Mid 函数的语法具有下面的命名参数:

部分说明
string必要参数。字符串表达式,从中返回字符。如果 string 包含 Null,将返回 Null
start必要参数。为 Long。string 中被取出部分的字符位置。如果 start 超过 string 的字符数,Mid 返回零长度字符串 ("")
length可选参数;为 Variant (Long)。要返回的字符数如果省略或 length 超过文本的字符数(包括 start 处的字符),将返回字符串中从 start 到尾端的所有字符。

 

 

将您的代码做了些修改

 

Private Sub Command1_Click()

    Dim i As Long, n As Long, m As Long, a As Long
   
    n = Len(Text1.Text) '统计字数
    a = 1 '从第一个字开始找
   
    Do While a <= n '检查完所有字数
   
        If Asc(Mid(Text1.Text, a, 1)) >= 48 And Asc(Mid(Text1.Text, a, 1)) <= 57 Then  '数字
            m = m + 1
        ElseIf Asc(Mid(Text1.Text, a, 1)) >= 65 And Asc(Mid(Text1.Text, a, 1)) <= 90 Then '小写字母
            i = i + 1
        ElseIf Asc(Mid(Text1.Text, a, 1)) >= 97 And Asc(Mid(Text1.Text, a, 1)) <= 122 Then '大写字母
            i = i + 1
        End If
        a = a + 1
       
    Loop

    MsgBox "字母个数为" & i & ", 数字个数为" & m
   
   
   
End Sub

给你分析:

第一,你对Mid函数的使用方法错误,应该把Mid里的 “1” 和 “i”调换,因为它的格式为

  Mid([字符串], [第几个数开始], [选中的长度])

第二,在Do while 那里就写错了,我知道你是想等它为“#”时结束循环,但一开始的时候如果不是“#”就不能进入循环了,所以不能 While Asc(Mid(Text1.Text, i, 1)) = 35,得把判断 35 的代码放到 Do 循环中,如果是35就结束循环。

 

参考代码(用你的代码来修改的):

Private Sub Command1_Click()
   i = 1
    n = Len(Text1.Text)
    m = 0
    a = 0
   
    Do
    If Asc(Mid(Text1.Text, i, 1)) >= 48 And Asc(Mid(Text1.Text, i, 1)) <= 57 Then
   
      m = m + 1
   
    End If
    i = i + 1
    If Asc(Mid(Text1.Text, i, 1)) = 35 Then Exit Do
    Loop
    a = n - m
    MsgBox "字母个数为" & a & "数字个数为" & m

End Sub

代码改为

 

Private Sub Command1_Click()
i = 1
n = Len(Text1.Text)
m = 0
a = 0

Do
  If Asc(Mid(Text1.Text, i, 1)) >= 48 And Asc(Mid(Text1.Text, i, 1)) <= 57 Then
   m = m + 1
  End If
i = i + 1
Loop Until Asc(Mid(Text1.Text, i, 1)) = 35
a = n - m
MsgBox "字母个数为" & a & "数字个数为" & m
End Sub

上一个:vb鼠标滚轮问题
下一个:VB制作小程序问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,