1

保存せずに、新しい一時的なブックにコピーしたいワークシートがあります。

Worksheet.Copyワークシートを新しい名前のない(Book1、Book2、Book3など)ワークブックにコピーします。すべてのシートを同じブックにコピーしたい。

最初以降のすべてのワークシートで、を使用してみWorksheet.Copy After:=xlWb.Sheets(1)ましたが、xlWbワークブックオブジェクトを設定するときに新しく作成されたワークブックを参照する方法がわかりません。受け取り続けます

実行時エラー9、「添え字が範囲外です」。

Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Dim xlWbOld As String
Dim xlWs As Excel.Worksheet
Dim xlWbNew As Excel.Workbook
Dim xlWsOld As Excel.Worksheet
Dim xlRng As Excel.Range
Dim xlRngOld As Excel.Range

xlWbOld = ActiveWorkbook.Name

Set xlApp = New Excel.Application
xlApp.Visible = True                                '*** Quite Important to set Excel.Visible,_
                                                    'Otherwise user wouldn't see the application's running _
                                                    'even though it would run as background

xlApp.Application.ScreenUpdating = False
Set xlWb = xlApp.Workbooks.Add                      'Create a new Workbook
Set xlWs = xlWb.Worksheets.Add

そして、これはワークシートがコピーされるべき場所です:

Select Case strRptType
    Case "DAILY"
        xlWs.Name = "1-Daily Price"
        'Check the last column and the last row
        lLastRow = oBasic.GetLast(, "DailyRpt", False, "A")
        iLastCol = oBasic.GetLast(, "DailyRpt", True, 4)
        Set xlRngOld = wksDailyRpt.Range(wksDailyRpt.Cells(4, 1), wksDailyRpt.Cells(lLastRow, iLastCol))
        Application.ScreenUpdating = True
        xlRngOld.Copy

        Set xlRng = xlWs.Cells(1, 1)
        xlRng.PasteSpecial Paste:=xlPasteValues
        xlWs.Columns.AutoFit

        For Each xlWsOld In ActiveWorkbook.Worksheets
            If xlWsOld.Name = "ForwardPrices" Or xlWsOld.Name = "ForwardVolatilities" _
              Or xlWsOld.Name = "ForwardReturns" Or xlWsOld.Name = "ForwardCorrelations" Then

                Sheets(xlWsOld.Name).Copy After:=Workbooks(xlWb).Sheets(1)

            End If
        Next xlWsOld
End Select
4

3 に答える 3

1

この小さなマクロは、開いているすべてのブックのすべてのシートを調べ、現在のシートの後にそれらをコピーします。

Sub GatherAllSheets()
  Dim Wb As Workbook, Sh As Worksheet
  For Each Wb In Workbooks
    If Not Wb Is ThisWorkbook Then
      For Each Sh In Wb.Worksheets
        Sh.Copy after:=ActiveSheet
      Next Sh
    End If
  Next Wb
End Sub

これはあなたが必要なものですか?
または、同じシートにシートの内容をコピーする必要がありますか?

于 2013-02-14T19:04:12.660 に答える
0

私はそれを次のように解決しました:

            For Each xlWsOld In ActiveWorkbook.Worksheets
                If xlWsOld.Name = "ForwardPrices" Or xlWsOld.Name = "ForwardVolatilities" _
                Or xlWsOld.Name = "ForwardReturns" Or xlWsOld.Name = "ForwardCorrelations" Then

                    Set xlRngOld = Nothing
                    Set xlWsForwards = xlWb.Worksheets.Add

                    lLastRow = oBasic.GetLast(, xlWsOld.Name, False, "A")
                    iLastCol = oBasic.GetLast(, xlWsOld.Name, True, 1)

                    Set xlRngOld = xlWsOld.Range(xlWsOld.Cells(1, 1), xlWsOld.Cells(lLastRow, iLastCol))

                    xlWsForwards.Name = xlWsOld.Name
                    xlRngOld.Copy
                    Set xlRngForwards = xlWsForwards.Cells(1, 1)
                    xlRngForwards.PasteSpecial Paste:=xlPasteValues
                    xlWsForwards.Columns.AutoFit

                    xlWsForwards.Cells(1, 1).Select

                    Set xlWsForwards = Nothing

                End If
            Next xlWsOld
于 2013-02-15T12:40:22.403 に答える
0

新しいブックの作成をスキップして、すべてのシートを一度にコピーします。

xlWbOld.Sheets(Array("ForwardPrices", "ForwardVolatilities", "ForwardReturns", "ForwardCorrelations")).Copy
Set xlWb = ActiveWorkbook

このようにコピーすると、ActiveWorkbookになる新しいワークブックが作成されます。次に、それをブックオブジェクトに割り当て、後でその名前で参照できます。

于 2016-09-29T11:27:54.327 に答える