我正在将一些 VBS 代码转换为 VB6 。大多数练习都是复制和粘贴事务,除了这个功能,
# p is the sequence number of prime series
# n is the sequence of natural numbers to be tested if prime or not
# i is the sequence of natural numbers which will be used to devide n for testing
# L is the sequence limit of prime series user wants to see
p=2;n=3
L=int(input('Enter the how many prime numbers you want to see: '))
print ('# 1 prime is 2')
while(p<=L):
i=2
while i<n:
if n%i==0:break
i+=1
else:print('#',p,' prime is',n); p+=1
n+=1 #Line X
#when it breaks it doesn't execute the else and goes to the line 'X'
代码在 VBS 中编译得很好。但是当我在VB6中使用此函数时,我得到了不同的结果。
在 VBS 中显示消息-1
在 VB6 中,这显示消息下标超出范围
为什么会这样,如何将其转换为 VB6 ?
答案 0 :(得分:3)
在VBScript中,重新整理数组使其UBound为-1是一种将数组标记为空数组的方法。在VB6中,负边界是可能的,但上限必须是> =下界。请考虑以下事项:
Public Function TestMe()
Dim RowCount: RowCount = -1
Dim FieldCount: FieldCount = -1
ReDim ANames(-2 To RowCount, -2 To FieldCount)
ANames(-1, -1) = "Hi"
MsgBox ANames(-1, -1)
End Function
在VB6中,这样运行顺利,弹出&#34;嗨&#34;正如所料。
就解决方法而言,如果ANames
是数组变量,则只需使用
Erase ANames
而不是你的ReDim
。同样,如果ANames
是变量变量(但不是数组变量),则只需为其分配Empty
。