为什么老是报下标越界呢

Sub 分级产品()           '分级产品的数据
        Dim myPath, file1, AK As Workbook, i As Integer, K As Integer, br(32)
    
        Application.ScreenUpdating = False
    
myPath = "E:\最新估值表(新接口)\"
Set w1 = Worksheets("更新产品")
K = w1.Range("b65536").End(xlUp).Row   '第2列已用行数

For i = 2 To K

For j = 0 To 30   '用于暂存数据,每次要清零
br(j) = 0
Next j

file1 = w1.Cells(i, 2).Value   '对应估值表的名称

myfile = myPath & file1 & ".xls"
       Set AK = Workbooks.Open(myfile)
                
               br(2) = Mid(AK.Worksheets(file1).[a3], 6) '取出估值时间
               
               kk = AK.Worksheets(file1).Range("a65536").End(xlUp).Row   '第1列已用行数
               
                If WorksheetFunction.CountIf(AK.Worksheets(file1).[a1:a800], "资产净值") > 0 Then
                br(3) = Application.WorksheetFunction.VLookup("资产净值", AK.Worksheets(file1).Cells, 8, False)
                End If
                
                If WorksheetFunction.CountIf(AK.Worksheets(file1).[a1:a800], "资产合计") > 0 Then
                br(4) = Application.WorksheetFunction.VLookup("资产合计", AK.Worksheets(file1).Cells, 8, False)
                End If
                
                If WorksheetFunction.CountIf(AK.Worksheets(file1).[a1:a800], "实收资本") > 0 Then
                br(5) = Application.WorksheetFunction.VLookup("实收资本", AK.Worksheets(file1).Cells, 8, False)
                End If

                
                If WorksheetFunction.CountIf(AK.Worksheets(file1).[a1:a800], "其中债券投资") > 0 Then
                br(10) = Application.WorksheetFunction.VLookup("其中债券投资", AK.Worksheets(file1).Cells, 8, False)
                End If
                
                
                If WorksheetFunction.CountIf(AK.Worksheets(file1).[a1:a800], "银行间_已上市_企业债") > 0 Then
                br(12) = Application.WorksheetFunction.VLookup("银行间_已上市_企业债", AK.Worksheets(file1).Cells, 8, False)
                End If
                
                
                If WorksheetFunction.CountIf(AK.Worksheets(file1).[a1:a800], "100201") > 0 Then
                br(14) = Application.WorksheetFunction.VLookup("100201", AK.Worksheets(file1).Cells, 8, False) '活期存款
                End If
                
                If WorksheetFunction.CountIf(AK.Worksheets(file1).[a1:a800], "1021") > 0 Then
                br(15) = Application.WorksheetFunction.VLookup("1021", AK.Worksheets(file1).Cells, 8, False) '备付金
                End If
                
                If WorksheetFunction.CountIf(AK.Worksheets(file1).[a1:a800], "1031") > 0 Then
                br(16) = Application.WorksheetFunction.VLookup("1031", AK.Worksheets(file1).Cells, 8, False) '存出保证金
                End If
                
                
                
       '优先级相关数据提取
       
                k21 = 0    '有时存在多个优先级,需要累加
                For s = 5 To kk    '取优先级份额
                
                kemu = AK.Worksheets(file1).Cells(s, 1)    '取出第1列的科目代码
                k22 = AK.Worksheets(file1).Cells(s, 3)   '取出第3列的数值
                
                If InStr(kemu, "实收资本") > 0 Then
                    If InStr(kemu, "优先级") > 0 Or InStr(kemu, "优先") > 0 Or InStr(kemu, "A类") > 0 Then
                    k21 = k21 + k22
             
                    End If
                End If
                               
                Next s
                br(17) = k21  '记录优先份额
                
                
                k23 = 0
                For s = 5 To kk    '取优先级净值
                
                kemu = AK.Worksheets(file1).Cells(s, 1)    '取出第1列的科目代码
                k24 = AK.Worksheets(file1).Cells(s, 8)   '取出第8列的数值
                
                If InStr(kemu, "资产净值") > 0 Then
                If InStr(kemu, "优先级") > 0 Or InStr(kemu, "优先") > 0 Or InStr(kemu, "A类") > 0 Then
                k23 = k23 + k24
             
                End If
                End If
                               
                Next s
                br(18) = k23  '记录优先级净值
                
                
                
                For s = 5 To kk    '取优先份额的累计单位净值
                
                kemu = AK.Worksheets(file1).Cells(s, 1)    '取出第1列的科目代码
                k25 = AK.Worksheets(file1).Cells(s, 2)   '取出第2列的数值
                
                If InStr(kemu, "累计单位净值") > 0 Then
                If InStr(kemu, "优先级") > 0 Or InStr(kemu, "优先") > 0 Or InStr(kemu, "A类") > 0 Then
                br(19) = k25  '记录单位净值
             
                End If
                End If
                               
                Next s
                
                
                
                
       '次级相关数据提取
       
                For s = 5 To kk    '取次级份额
                               
                kemu = AK.Worksheets(file1).Cells(s, 1)    '取出第1列的科目代码
                k26 = AK.Worksheets(file1).Cells(s, 3)  '取出第3列的数值
                
                If InStr(kemu, "实收资本") > 0 Then
                If InStr(kemu, "次级") > 0 Or InStr(kemu, "劣后") > 0 Or InStr(kemu, "风险级") > 0 Or InStr(kemu, "B类") > 0 Then
                br(20) = k26  '记录次级份额
             
                End If
                End If
                               
                Next s
                
                
                For s = 5 To kk    '取次级净值
                
                kemu = AK.Worksheets(file1).Cells(s, 1)    '取出第1列的科目代码
                k27 = AK.Worksheets(file1).Cells(s, 8)   '取出第8列的数值
                
                If InStr(kemu, "资产净值") > 0 Then
                If InStr(kemu, "次级") > 0 Or InStr(kemu, "劣后") > 0 Or InStr(kemu, "风险级") > 0 Or InStr(kemu, "B类") > 0 Then
                br(21) = k27  '记录次级净值
             
                End If
                End If
                               
                Next s
                
                
                
                For s = 5 To kk    '取次级份额的累计单位净值
                
                kemu = AK.Worksheets(file1).Cells(s, 1)    '取出第1列的科目代码
                k28 = AK.Worksheets(file1).Cells(s, 2)   '取出第2列的数值
                
                If InStr(kemu, "累计单位净值") > 0 Then
                    If InStr(kemu, "次级") > 0 Or InStr(kemu, "劣后") > 0 Or InStr(kemu, "风险级") > 0 Or InStr(kemu, "B类") > 0 Then
                    br(8) = k28  '记录单位净值
             
                    End If
                End If
                               
                Next s
            
                  
            Workbooks(file1 & ".xls").Close False
            
            
            
            
            For j = 3 To 22
            w1.Cells(i, j).Value = br(j - 1)
            w1.Cells(i, 3) = br(2)
            w1.Cells(i, 7) = br(17) / br(20) '份额杠杆
            w1.Cells(i, 8) = br(18) / br(21) '净值杠杆
            w1.Cells(i, 12) = w1.Cells(i, 11) - w1.Cells(i, 13) '交易所债券
            w1.Cells(i, 14) = w1.Cells(i, 15) + w1.Cells(i, 16) + w1.Cells(i, 17) '现金资产
            Next j
   
            
             
Next i

        Application.ScreenUpdating = True
        MsgBox "提取完成,请查看!"
    End Sub

br(2) = Mid(AK.Worksheets(file1).[a3], 6) '取出估值时间

这句报错?是的话说明打开的excel文件没有file1变量值存储的工作表,自己核对下Excel文件。如果只有一个工作表或者数据在第一个工作表中直接用下标1获取就行了

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632