0

みなさん、エラーの解決策を見つけようとしていますが、これを解決するための同様の例がネット上で見つかりません。ループに入ったときに変数 (i) を 3 に設定し、最初の if ステートメントに入ると正常に実行され、ファイルがコピーされてシート 3 に挿入されますが、4 にインクリメントされて 2 番目の 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
4

3 に答える 3

2

i 番目のシートが存在しないことを意味します。戦略的に配置されたシートを操作するたびに、これを確認してください。

If i > ThisWorkbook.Worksheets.Count then Exit Do

于 2012-11-01T14:03:33.767 に答える
1

おそらく 4 番目のワークシートはありません。コードに基づいて、シートが存在することを前提としているため、実行時にシートを追加する必要があります。次のようなロジックで、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
于 2012-11-01T14:06:09.273 に答える
0

また、配列とは異なり、最初のシートがシート1になることも覚えておいてください。

于 2012-11-01T14:08:29.600 に答える