首页 > 解决方案 > System.Runtime.InteropServices.COMException:'无效索引。(来自 HRESULT 的异常:0x8002000B (DISP_E_BADINDEX))'

问题描述

我一直在 VB.net 中编写代码,当我尝试启动时发生此错误: System.Runtime.InteropServices.COMException: 'Invalid index. (来自 HRESULT 的异常:0x8002000B (DISP_E_BADINDEX))'

这是[错误的快速观察] [1] [1]:https://i.stack.imgur.com/zsYPO.png

错误发生在第 10 行

With CostSheetApp.Workbooks(nameOfTheCostSheet)

这就是所有的子

Private Sub CreateHoursAssignementsSheet(CostSheetApp As Excel.Application, nameOfTheCostSheet As String, Project As WBSProject, ByRef WBSResourceList As List(Of WBSResource), Optional withRiskString As String = "")
    'Variable preparation 
    Project.ProjectConstant.COST_SHEET_COL_ST_RESOURCE = Project.ProjectConstant.COST_SHEET_COL_FOLOWING_TYPE + 1
    Project.ProjectConstant.COST_SHEET_COL_END_RESOURCE = Project.ProjectConstant.COST_SHEET_COL_ST_RESOURCE + WBSResourceList.Count - 1
    Project.ProjectConstant.COST_SHEET_COL_RISK = Project.ProjectConstant.COST_SHEET_COL_END_RESOURCE + 1
    Project.ProjectConstant.COST_SHEET_COL_MIN_HOURS = Project.ProjectConstant.COST_SHEET_COL_RISK + 1
    Project.ProjectConstant.COST_SHEET_COL_LIKEHOOD_HOURS = Project.ProjectConstant.COST_SHEET_COL_MIN_HOURS + 1
    Project.ProjectConstant.COST_SHEET_COL_MAX_HOURS = Project.ProjectConstant.COST_SHEET_COL_LIKEHOOD_HOURS + 1

    With CostSheetApp.Workbooks(nameOfTheCostSheet)

        For Each sheet In .Sheets 'delete the old sheet if it exist

            If (sheet.name.Equals(Project.ProjectConstant.NAME_OF_COST_SHEET_SHEET + withRiskString)) Then
                Call .Sheets(Project.ProjectConstant.NAME_OF_COST_SHEET_SHEET + withRiskString).delete
                Exit For
            End If
        Next
        'create the new sheet
        Call .Sheets.Add()
        .ActiveSheet.name = Project.ProjectConstant.NAME_OF_COST_SHEET_SHEET + withRiskString

    End With



    If (withRiskString.Equals("")) Then
        ExtractTemplateIntoCostSheet(CostSheetApp, WBSResourceList)
    Else
        ExtractTemplateIntoCostSheet(CostSheetApp, WBSResourceList, False)
    End If

    ' extend the range that are paste on all the rows necessary for the cost sheet
    With CostSheetApp.Workbooks(nameOfTheCostSheet).Sheets(Project.ProjectConstant.NAME_OF_COST_SHEET_SHEET + withRiskString)
        If (withRiskString.Equals("")) Then
            ' .Cells(Project.projectConstant.COST_SHEET_START_ROW + 1, Project.projectConstant.COST_SHEET_COL_LIKEHOOD_HOURS).formula = Project.projectConstant.COST_SHEET_FORMULA_LIKEHOOD.Replace("0", CStr(Project.projectConstant.COST_SHEET_START_ROW + 1)) 'put the formula for the Likehood column to always display the max hours of all the line 

            .range(.Cells(Project.ProjectConstant.COST_SHEET_START_ROW + 1, Project.ProjectConstant.COST_SHEET_COL_WP), .Cells(Project.ProjectConstant.COST_SHEET_START_ROW + 1, Project.ProjectConstant.COST_SHEET_COL_MAX_HOURS)).Select
        Else
            .range(.Cells(Project.ProjectConstant.COST_SHEET_START_ROW + 1, Project.ProjectConstant.COST_SHEET_COL_WP), .Cells(Project.ProjectConstant.COST_SHEET_START_ROW + 1, Project.ProjectConstant.COST_SHEET_COL_END_RESOURCE)).Select
        End If
        CostSheetApp.Selection.Copy


        If (withRiskString.Equals("")) Then
            .range(.Cells(Project.ProjectConstant.COST_SHEET_START_ROW + 1, Project.ProjectConstant.COST_SHEET_COL_WP), .Cells(Project.NumberOfTask + Project.NumberOfSumarryTasks + 4, Project.ProjectConstant.COST_SHEET_COL_MAX_HOURS)).Select
        Else
            .range(.Cells(Project.ProjectConstant.COST_SHEET_START_ROW + 1, Project.ProjectConstant.COST_SHEET_COL_WP), .Cells(Project.NumberOfTask + Project.NumberOfSumarryTasks + 4, Project.ProjectConstant.COST_SHEET_COL_END_RESOURCE)).Select
        End If

        CostSheetApp.Selection.PasteSpecial(Paste:=xlPasteFormats, SkipBlanks:=False, Transpose:=False)

    End With

End Sub

希望有人能够帮助我克服这个问题。如果您需要进一步的解释,请告诉我。

先感谢您。

标签: vb.net

解决方案


推荐阅读