6

これは非常に単純なはずですが、私はフォーラムと SO の回答を何時間も検索して運が悪いので、(しぶしぶ)自分の質問を作成しています。

私がやろうとしているのは、単に新しいワークブックを作成し、別のワークブックの範囲をそのワークブックに貼り付けることです。シンプルですね..?

元のワークブック、Book1 としましょう。セル A1:B10のをコピーする新しいブック Book2 を作成しようとしています。

私のコードの 1 つのバージョンを次に示します (Book1 を開いて開始):

Range("A1:B10").Copy
Set NewBook = Workbooks.Add
    With NewBook
        .SaveAs Filename:="Book2.xls"
    End With
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

これにより、「Range クラスの PasteSpecial に失敗しました」というエラーが発生します。次の修正を試みましたが、うまくいきませんでした。

  • 「Workbooks("Book2.xls").Activate」をコードに追加
  • PasteSpecial 行の余分な引数を削除しました
  • 「.PasteSpecial」の代わりに「.Paste」を試しました
  • 「Selection.PasteSpecial」を「ActiveSheet.PasteSpecial」に変更
  • ワークブックとシート参照を含むコピー範囲を明示的に参照する
  • 最初に新しいワークブックを作成してからコピーを実行してから、新しいワークブックを再アクティブ化して貼り付けます

上記の解決策はどれも機能しません... この段階での知恵はありがたく受け取ります!

4

2 に答える 2

19

これはあなたがしようとしていることですか?コードの機能を理解するのに問題がないように、コードにコメントを付けました。

Option Explicit

Sub Sample()
    Dim wbI As Workbook, wbO As Workbook
    Dim wsI As Worksheet, wsO As Worksheet

    '~~> Source/Input Workbook
    Set wbI = ThisWorkbook
    '~~> Set the relevant sheet from where you want to copy
    Set wsI = wbI.Sheets("Sheet1")

    '~~> Destination/Output Workbook
    Set wbO = Workbooks.Add

    With wbO
        '~~> Set the relevant sheet to where you want to paste
        Set wsO = wbO.Sheets("Sheet1")

        '~~>. Save the file
        .SaveAs Filename:="C:\Book2.xls", FileFormat:=56

        '~~> Copy the range
        wsI.Range("A1:B10").Copy

        '~~> Paste it in say Cell A1. Change as applicable
        wsO.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    End With
End Sub
于 2012-09-09T16:46:20.803 に答える
5

これは私にとってはうまくいきます。

Private Sub CommandButton1_Click()
Dim newWB As Workbook, currentWB As Workbook
Dim newS As Worksheet, currentS As Worksheet

'Copy the data you need
Set currentWB = ThisWorkbook
Set currentS = currentWB .Sheets("Sheet1")
currentS .Range("A:M").Select
Selection.Copy

'Create a new file that will receive the data
Set newWB = Workbooks.Add
    With newWB
        Set newS = newWB.Sheets("Sheet1")
        newS.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        'Save in CSV
        Application.DisplayAlerts = False
        .SaveAs Filename:="C:\Temporary.csv", FileFormat:=xlCSV
        Application.DisplayAlerts = True
    End With
End Sub
于 2016-02-26T09:55:27.803 に答える