2016-07-19 14 views
1

Guysこれらのファンキーなvbaコマンドについて助けが必要です。 私は最初にlabownik-mil-2dl8.xlsと2番目のzestawienie.xlsという2つのスプレッドシートを持っています。最初の行を選択して2番目のものにコピーしますが、A1からA1にはコピーしない行をいくつか選択します。したがって、私の選択が5270から5273までの行であれば、たとえばE5272をD7に、AK5272をE7にしたいと考えています。 2番目のスプレッドシートのボタンを押して(最初にスプレッドシートで選択するだけで)それができたらいいですか? Makroは2番目のスプレッドシートの最初の空の行に貼り付ける必要があります。 私はこのようなものがあります:選択したデータを、あるセルから別のブックにコピーします。

Sub Get_Data() 
    Dim lastrowDB As Long, lastrow As Long 
    Dim arr1, arr2, i As Integer 

    With Sheets("zestawienie") 
     lastrowDB = .Cells(.Rows.Count, "D").End(xlUp).Row + 1 
    End With 

    arr1 = Array("E", "AK", "B", "D", "F", "G", "H") 
    arr2 = Array("D", "E", "F", "H", "L", "M", "N") 

    For i = LBound(arr1) To UBound(arr1) 
     With Sheets("Labownik") 
      lastrow = Application.Max(3, .Cells(.Rows.Count, arr1(i)).End(xlUp).Row) 
      .Range(.Cells(3, arr1(i)), .Cells(lastrow, arr1(i))).Copy 
      Sheets("zestawienie").Range(arr2(i) & lastrowDB).PasteSpecial xlPasteValues 
     End With 
    Next 
    Application.CutCopyMode = False 
End Sub 

をしかし、両方のシートを1つのファイルにある場合、それが唯一の働いている、とmakroは選択から全体ではなく、データをコピーされます。私はそれを適切に行う方法は知らない。
英語は母国語ではありませんが、読みにくいのは残念です。

は、あなたはそれが両方のワークブックで作業する方法を知っているだろうように、ワークブックオブジェクトを追加する必要があり、事前に

答えて

1

、ありがとうございました。あなたのコードは、それらを同じワークブックのワークシートとして扱っています。

Dim wbSecond as Workbook 

Set wbSecond = Workbook.Open(parameters) 

これで、1つのワークブックをwbSecondで参照できるようになり、MyWorkbookのブックをいつでも参照できます。

その後、次の構文を使用することができます。

MyWorkbook.Sheets(sheet_name).cells(row,col) = wbSecond.Sheets(sheet_name).cells(row, col)

0

一つの方法は、Application.Intersectとなります

Dim rngFrom As Range, rngTo As Range, index As Long 

Set rngTo = Workbooks("zestawienie.xls").Sheets("Arkusz1").Range("D7,E7,F7,H7,L7,M7,N7") ' the columns "D", "E", "F", "H", "L", "M", "N" on row 7 

Set rngFrom = Workbooks("labownik-mil-2dl8.xls").Sheets("Labownik - 2SLU").Range("E:E,AK:AK,B:B,D:D,F:F,G:G,H:H") ' the columns "E", "AK", "B", "D", "F", "G", "H" 

Set rngFrom = Application.Intersect(rngFrom, rngFrom.Worksheet.Range("5270:5273")) ' the columns "E", "AK", "B", "D", "F", "G", "H" intersected with rows from 5270 to 5273 gives the ranges E5270:E5273,AK5270:AK5273,B5270:B5273,D5270:D5273,F5270:F5273,G5270:G5273,H5270:H5273 

For index = 1 To rngTo.Areas.Count 

    rngFrom.Areas(index).Copy 
    rngTo.Areas(index).PasteSpecial xlPasteValues 

Next 
関連する問題