Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 错误9超出范围。工作表(i)_Vba_Ms Access_Excel_Ms Access 2007 - Fatal编程技术网

Vba 错误9超出范围。工作表(i)

Vba 错误9超出范围。工作表(i),vba,ms-access,excel,ms-access-2007,Vba,Ms Access,Excel,Ms Access 2007,大家好,我一直在努力寻找解决我的错误的方法,但我在网上找不到类似的例子来解决这个问题。当变量(I)进入循环时,将其设置为3,然后输入第一个if语句。如果运行正常,则会复制文件并将其插入第3页,但一旦其增加到4,则会输入第二个if语句。我收到错误9 Set wks4 = wkb.Sheets(i) 这是下面一些完整的代码,希望你们能帮助我 Set Excel_App = New EXCEL.Application Excel_App.Visible = False Set wkb =

大家好,我一直在努力寻找解决我的错误的方法,但我在网上找不到类似的例子来解决这个问题。当变量(I)进入循环时,将其设置为3,然后输入第一个if语句。如果运行正常,则会复制文件并将其插入第3页,但一旦其增加到4,则会输入第二个if语句。我收到错误9

      Set wks4 = wkb.Sheets(i)
这是下面一些完整的代码,希望你们能帮助我

Set Excel_App = New EXCEL.Application
Excel_App.Visible = False
Set wkb = EXCEL.Workbooks.Add
Set wks = wkb.Sheets(1) 'want first sheet

With wks
    ......
    'extra code involing input to sheet 1 
End With


    Dim wkb2 As EXCEL.Workbook
    Set wkb2 = EXCEL.Application.Workbooks.Open(strDir & "\DETAILS.xlsx")

        wkb2.ActiveSheet.Cells.Select
        Selection.Copy
        Set wks2 = wkb.Sheets(2)
        With wks2
            .Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        End With
        wkb2.Close

i = 3
      Do While Not rstTypes.EOF

            If rstTypes![TYPE] Like "GROUPED" Then
                    DoCmd.OutputTo acOutputReport, "EXCEL_CBD_CAP_CR", acFormatXLS, strDir & "\SAMEDAY_NEXTDAY_FUTURE.xls", 0
                    Dim wkb3 As EXCEL.Workbook
                    Set wkb3 = EXCEL.Application.Workbooks.Open(strDir & "\SAMEDAY_NEXTDAY_FUTURE.xls")

                    wkb3.ActiveSheet.Cells.Select
                    Selection.Copy
                    Set wks3 = wkb.Sheets(i)
                    With wks3
                        .Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                :=False, Transpose:=False
                    End With
                    wkb3.Close                   
                    i = i + 1
            End If

            If rstTypes![TYPE] Like "GROUPED2" Then
                DoCmd.OutputTo acOutputReport, "EXCEL_ND/FUT_CAP_CR", acFormatXLS, strDir & "\NEXTDAY_FUTURE.xls", 0
                    Dim wkb4 As EXCEL.Workbook
                    Set wkb4 = EXCEL.Application.Workbooks.Open(strDir & "\NEXTDAY_FUTURE.xls")


                    wkb4.ActiveSheet.Cells.Select
                    Selection.Copy
                    Set wks4 = wkb.Sheets(i)
                    With wks4
                        .Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                :=False, Transpose:=False
                    End With
                    wkb4.Close
                    Kill (strDir & "\NEXTDAY_FUTURE.xls")

                    i = i + 1
            End If
            rstTypes.MoveNext
 Loop

这意味着第i张图纸不存在,每次您想要与具有战略位置的图纸交互时,请检查此项:


如果i>thishworkbook.Worksheets.Count,然后退出Do

这意味着第i张工作表不存在,请在每次要与具有战略位置的工作表交互时选中此选项:


如果我>thishworkbook.Worksheets.Count,然后退出Do

您可能没有第四张工作表。根据您的代码,我假设您希望该工作表存在,因此需要在运行时添加该工作表。您应该按照如下逻辑包装wks3和wks4的工作表设置:

if wkb.Sheets.Count < i then
   Set wks3 = wkb.sheets.add
end if
如果wkb.Sheets.Count
后来

if wkb.Sheets.Count < i then
   Set wks4 = wkb.sheets.add
end if
如果wkb.Sheets.Count
您可能没有第四张工作表。根据您的代码,我假设您希望该工作表存在,因此需要在运行时添加该工作表。您应该按照如下逻辑包装wks3和wks4的工作表设置:

if wkb.Sheets.Count < i then
   Set wks3 = wkb.sheets.add
end if
如果wkb.Sheets.Count
后来

if wkb.Sheets.Count < i then
   Set wks4 = wkb.sheets.add
end if
如果wkb.Sheets.Count
还记得第一张纸将是与数组不同的纸1

还记得第一张纸将是与数组不同的纸1

首先,必须问一个非常愚蠢的问题。。。您是否在代码中声明了wks4?首先,必须问一个非常愚蠢的问题。。。您是否在代码中声明了wks4?