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制作小程序问题