【问题标题】:Subscript Out off range vb6下标超出范围 vb6
【发布时间】:2021-12-22 19:53:37
【问题描述】:

帮帮我,长话短说,我正在制作防病毒软件。现在我想让我的防病毒软件改变颜色,所以我正在制作一个表格和 .ini 文件(A 保存)。因此,经过长时间的模块和功能编码。我想测试一下,直到我点击设置表单按钮。我的下标超出范围错误(9)。

Dim Line As String, tmp() As String, ValueX(10) As String, a As Byte
a = 0
If IsFileX(Path) = True Then
    Open Path For Input As #1
        Do
            
            Line Input #1, Line
            tmp = Split(Line, "=")
            If UBound(tmp) = 1 Then
                a = a + 1
                ValueX(a) = tmp(1)
                Ck1.value = CInt(Left(Replace(ValueX(a), " ", ""), 1))
            End If
                If UBound(tmp) = 1 Then
                a = a + 2
                ValueX(a) = tmp(1)
                Ck2.value = CInt(Left(Replace(ValueX(a), " ", ""), 1))
            End If
                If UBound(tmp) = 1 Then
                a = a + 3
                ValueX(a) = tmp(1)
                Ck3.value = CInt(Left(Replace(ValueX(a), " ", ""), 1))
            End If
                If UBound(tmp) = 1 Then
                a = a + 4
                ValueX(a) = tmp(1)
                Ck4.value = CInt(Left(Replace(ValueX(a), " ", ""), 1))
            End If
                If UBound(tmp) = 1 Then
                
                a = a + 5
                ValueX(a) = tmp(1)
                Ck5.value = CInt(Left(Replace(ValueX(a), " ", ""), 1))
            End If
                If UBound(tmp) = 1 Then
                a = a + 6
                ValueX(a) = tmp(1)
                Ck6.value = CInt(Left(Replace(ValueX(a), " ", ""), 1))
            End If
        Loop Until EOF(1)
    Close #1
Else
MsgBox " Read Antivirus Setting is ERROR !" & vbNewLine & "Because the file [ MurderAV.ini ] is not found!", vbCritical, "MurderAV Error"
End If
End Sub

高亮部分是ck5中的ValueX(a)。 (CK是复选框) 生病拍照,这样可以更清楚。Click Here 另外,我是初学者,所以我需要尽快帮助

【问题讨论】:

    标签: vb6 subscript


    【解决方案1】:

    问题是每个If 语句都有相同的条件:

    If UBound(tmp) = 1 Then
    

    所以,当你浏览代码时,你会执行:

    a = 0
    a = a + 1
    a = a + 2
    a = a + 3
    a = a + 4
    a = a + 5
    

    所以a 是 15,所以你有:

    ValueX(15) = tmp(1)
    

    但是由于ValueX(10) As String,你不在数组的末尾。

    【讨论】:

    • 嘿,我已经更改了我的代码,现在只有 3 个复选框,并且下标现在消失了。但是出现类型不匹配(13),问题出在:
    • @AdrianTheo 也许你应该为新代码发布一个新问题
    • @AdrianTheo “类型不匹配”可能来自您的 CInt(...) 电话。请改用Val(...)。最终,您可能通过调用Left(Replace(ValueX(... 将错误的子字符串拉出,但我不确定。同意,这是一个不同的问题,但是为什么不在行上放置一个断点(单击左边距),然后验证值是您希望它们悬停在变量上还是在“立即窗口”(例如,?ValueX(a)?Left(Replace(ValueX(a), " ", ""), 1))。这将让您查看值并自行调试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2021-05-02
    • 2015-05-27
    • 2021-09-18
    • 2012-04-28
    • 2017-01-18
    相关资源
    最近更新 更多