You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB6开发杀毒软件读取ini配置时出现Subscript out of range(9)错误

错误原因

  • 数组越界是核心触发点:你定义的ValueX(10)数组默认下标范围为0~10,仅提供11个存储空间。但代码中a变量的累加逻辑完全不合理:只要读取的行符合=分割格式,每读一行a就会依次累加1/2/3/4/5/6,仅第一次循环走完a就会变成21,远大于数组最大下标10。运行到Ck5对应的逻辑时a已经涨到15,访问ValueX(15)超出数组范围,直接触发错误号9。
  • 业务逻辑完全错误:ini配置文件是每行存储一个键值对(比如Ck1=1、ThemeColor=3),你现在每读取一行就同时给6个复选框赋值,不仅会导致所有复选框的值都被最后一行配置覆盖,也完全不符合ini文件的读写设计。

修正方案

你完全不需要a变量和ValueX数组,直接根据拆分出的键名匹配对应复选框赋值即可,参考代码如下:

Private Sub GetSetting(Path As String)
Dim Line As String, tmp() As String
If IsFileX(Path) = True Then
    Open Path For Input As #1
        Do While Not EOF(1)
            Line Input #1, Line
            tmp = Split(Line, "=")
            If UBound(tmp) = 1 Then
                ' 去掉前后空格避免匹配失败
                tmp(0) = Trim(tmp(0))
                tmp(1) = Trim(tmp(1))
                ' 根据键名匹配对应复选框赋值
                Select Case tmp(0)
                    Case "Ck1": Ck1.Value = CInt(Left(tmp(1), 1))
                    Case "Ck2": Ck2.Value = CInt(Left(tmp(1), 1))
                    Case "Ck3": Ck3.Value = CInt(Left(tmp(1), 1))
                    Case "Ck4": Ck4.Value = CInt(Left(tmp(1), 1))
                    Case "Ck5": Ck5.Value = CInt(Left(tmp(1), 1))
                    Case "Ck6": Ck6.Value = CInt(Left(tmp(1), 1))
                    ' 其他配置项可以在这里追加
                End Select
            End If
        Loop
    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

注意要保证你的ini文件里的键名和上面Select Case里的字符串完全匹配,比如对应Ck5的配置行就是Ck5=1这种格式。

内容的提问来源于stack exchange,提问作者Adrian Theo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:54:08