2016-03-22 30 views
0

あるブックから別のブックに選択範囲のセルをコピーしようとしています。これは私の選択範囲で、これまでの最初のワークブックで使用されるコードをコピーします。1つのブックから別のブックにデータをコピーして貼り付ける

Sub Copy() 

'This selects the range of active cells, adds a border and copies all data. 
    Range("A1").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
End Sub 

これは第一、ブック内のセルを選択してコピーしている間、私は別のブックにそれを貼り付け、マクロでそれを組み込む困難を持っています。

Sub Paste() 
Dim x As Workbook 
Dim y As Workbook 

'## Open both workbooks first: 
Set x = Workbooks.Open(" path to copying book ") 
Set y = Workbooks.Open(" path to destination book ") 

'Now, transfer values from x to y: 
y.Sheets("sheetname").Range("A1").Value = x.Sheets("name of copying sheet").Range("A1") 

'Close x: 
x.Close 

End Sub 

2つのこと:ここでは別のものに1つのブックからのデータを貼り付け、マクロのサンプルがある

  1. 初期データと第一ワークブックは自分のコンピュータ上ではない保存された文書です。インターネットからエクスポートされたシートです。私は自分のコンピュータ上に保存されたブックに貼り付けようとしています。したがって、私は最初のブックのファイルパスまたはワークシート名を取得することは可能だとは思わない。
  2. 私は、2番目のブックのA列にある最初の使用可能な空白セルにデータを貼り付けたいと考えています。私はそれのためのコードはCurrentRow = Range("A1").End(xlDown).Offset(1, 0).Rowのようなものだと信じて、明らかにその列に始まるその行に貼り付けます。

誰かがこの2つのコードを1つに組み入れることができますか?

ありがとうございました!

答えて

0

最近、私が最近使用したコードの2つのスニペットがあり、あなたの苦境にお役立てください。

この最初のコードでは、特定のワークシートを名前(またはOffice Documentationで指定されたインデックス)で見つけることができます。これは、現在開いているすべてのワークシートをループする際にワークブックを指定する必要はありません。

Dim Sheet As Worksheet 
Dim sheetName As String 

sheetName = "Sheet1" 

For Each Sheet In Worksheets 
    If Sheet.Name = sheetName Then 
     Set GetSheet = Worksheets(sheetName) 
     Exit For 
    End If 
Next Sheet 

次のコードスニペット(私はのための信用を取ることはできませんが、原産地の情報が失われている)で、中に含まれる任意の指定されたワークシートと、すべてのデータを検索し、セル範囲に範囲オブジェクトを作成します。見つかりました。

(これは、すべてのデータが必要なのか、選択肢だけが必要なのか、あなたの質問から分かりません)。あなたは範囲オブジェクトを作成したら

Dim dataRange as Range 
    Dim lastCol As Long 
    Dim lastRow As Long 
    Dim sheetCells As range 

    Set sheetCells = Sheet.Cells 


    If WorksheetFunction.CountA(sheetCells) > 0 Then 
     'Search for any entry, by searching backwards by Rows. 
     lastRow = sheetCells.Find(What:="*", after:=[A1], _ 
        SearchOrder:=xlByRows, _ 
        SearchDirection:=xlPrevious).Row 
       ' Search for any entry, by searching backwards by Columns. 
     lastCol = sheetCells.Find(What:="*", after:=[A1], _ 
        SearchOrder:=xlByColumns, _ 
        SearchDirection:=xlPrevious).Column 

      ' Set the range from 1st cell of sheet to last cell found to contain data 
      Set dataRange = Sheet.range(Sheet.Cells(1, 1), Sheet.Cells(lastRow, lastCol)) 


    End If 

、多くはあなたがそれを行うことができますが、単に別のワークシートに値を挿入することがあります:

Dim newSheet as WorkSheet 

set newSheet = ThisWorkbook.Worksheets("New Sheet") ' Just an example 

'Using fields from last code snippet 
newSheet.Range(newSheet.Cells(1,1), newSheet.Cells(lastRow,lastCol)).value = dataRange.Value 
+0

は、上記のあなたの質問に答えるために、私が選択するように願っています最初のワークシート内のすべてのアクティブなセルをコピーします。また、3つのコードグループを1つにまとめましたが、エラーメッセージが表示され続けています:Set sheetCells = Sheet.Cells。理由を理解できません:Sありがとう@Sfadal! – BMRobin

+0

@BMRobin、申し訳ありませんが、返信にはしばらく時間がかかりました。エラーの内容は何ですか?指定された名前でループがワークシートを見つけられなかった可能性がありますので、オブジェクトは存在しません。シートの名前を確認し、ループの後にブレークポイントでデバッグを実行して、[ウォッチ]タブの[シート]オブジェクトを確認します。 – Sfadal

+0

@Sfadalありがとうございます。次のエラーが表示されます。実行時エラー '91':オブジェクト変数またはWithブロック変数が設定されていません。データを貼りたいワークシートの名前は「Sheet1」と呼ばれるので、コード内で何も変更する必要はありません。ご協力ありがとうございました! – BMRobin

関連する問題