不是有答案了吗?你想问这个答案怎么做出来的?

说实话,我是很讨厌这种代码填空题的,因为必须顺着写代码这家伙的思路来,要是跟不上人家的思路,那就直接完蛋

下面,我们来尝试一下搞懂这段代码的思路:
'前面的变量定义就略了,没有注释谁知道这些变量是干啥的,直接看下文
s = Text1.Text '变量s表示输入的字母串
List1.Clear '清空列表框
For i = 1 To 26
a(i) = 0
Next i
'上面这个循环把数组a的元素初始化为0,这在VB中其实没必要,VB已经帮你自动完成了
j = 1
For i = 1 To Len(s) '循环对字符串s的每一个字母依次处理
r = Mid(s, i, 1) '取出第i个字符
If a(Asc(r) - 64) = 1 Then '如果这个字母在数组a中对应的元素值为1,则……
b(j) = r '将这个字母存入数组b
c(j) = i '将它出现的位置存入数组c
j = j + 1 '将j后移一格,指向数组b和c的下一个空元素
'(所以前面的j=1是让j指向数组b和c的第一个空元素)
Else '否则……
'到这里,暂时还不知道a(Asc(r)-64)=1这个条件的含义,先跳过这个空继续往下看
End If
Next i
If j = 1 Then List1.AddItem "该字符串符合加密条件!"
'如果j=1,即数组b和c没有被放入元素;
'字符串符合加密条件,即字符串中没有重复的字母;
'因此,现在我们知道了,数组b表示重复的字母,数组c表示这些字母开始重复出现时的位置
'而数组a的元素等于1,表示对应的字母已经出现过了
'回到前面跳过的空处,这里是“这个字母还没有出现过”的操作,
'因此填 a(Asc(r) - 64) = 1 ,表示将这个字母的状态设置为“出现过了”
For i = 1 To j - 1 '循环将重复字母及其出现位置添加到列表框
'(如果j=1,则该循环不会执行)
List1.AddItem b(i) & " " & c(i) '这是该空的另一种填法
'(另外,你在3楼把答案抄错了,多写了一个加号)
Next i
-----吐槽分割线-----
这题我好像见过

这里面的数组定义得有点问题:
数组a只是个标记,用Boolean类型就可以了,用Integer的话,完全可以改成统计每个字母的出现次数的
数组b和c应该是搭配使用的,但是一个只有26个元素,另一个却有100个元素,这种不协调又是怎么回事……而且,只看b(1 To 26)这个定义,很容易误解为它也是表示26个字母的什么信息的,然而并不是