2012-11-01 58 views
0

嘿,大家我一直在试图找到解决我的错误,但我无法找到一个类似的例子在网络上解决这个问题。我有一个变量(我)设置为3,当它进入循环,然后进入第一个if语句它运行良好,文件被复制并插入到表3,但是一旦它增加到4,并进入第二条if语句我得到错误9上错误9超出范围.Sheets(i)

 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 
+0

首先,真的是愚蠢的问题,必须问......你是否在你的代码中声明wks4? –

回答

1

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

if wkb.Sheets.Count < i then 
    Set wks3 = wkb.sheets.add 
end if 

再后来

if wkb.Sheets.Count < i then 
    Set wks4 = wkb.sheets.add 
end if 
+0

非常感谢这工作! – KSM

2

这意味着,这并不存在第i个表,检查该要与具有战略地位的纸张交互每次:

If i > ThisWorkbook.Worksheets.Count then Exit Do

相关问题