0

「For Each Column」ループを使用して、貼り付け内容をあるシートから別のシートにコピーしようとしています。列オブジェクト内のセルを正しく参照するのに苦労しています。または、少なくともそれが問題だと思います。

行 Sheets("Combo")... がこのエラーを出すのはなぜですか: オブジェクトはこのプロパティまたはメソッドをサポートしていません

Sub CRangeCopy()

Set ws = Sheets("Sheet1")
ColNr = 1

For Each c In ws.UsedRange.Columns
    lastCellNr = c.Cells.Count
    c.Cells(2, lastCellNr).Copy
    Sheets("Sheet2").Cells(2, ColNr).Paste ' Object doesn't support 
                                          ' this property or method
    ColNr = ColNr + 1
Next c

End Sub

編集:

提案された変更を行い、現在 Range を使用しています。以下のコードはデバッグ モードで動作することがありますが、全体として実行すると動作しませんか? 理由はありますか?

   Sub CopyToNewSheet()

   Sheets.Add.Name = "Combo"
   Set ws = Sheets("Sheet1")
        For Each c In ws.UsedRange.Columns
            Range(Cells(2, c.Column), Cells(4, c.Column)).Copy Sheets("Combo").Cells(2,  c.Column)
        Next c
   End Sub
4

2 に答える 2

2

UsedRange 内の各列の 2 番目のセルで始まる範囲をコピーしたいと仮定し、このコピーする範囲は、その列の空でない行の最後の数と同じである必要があります。次の短いコードを使用する必要があります。

'... your code here
For Each c In ws.UsedRange.Columns
    lastCellNr = c.Cells.Count

    Range(Cells(2, c.Column), Cells(lastCellNr, c.Column)).Copy  Sheets("sheet2").Cells(2, ColNr)

    ColNr = ColNr + 1
Next c
'...rest of your code here

簡単な説明:メソッドを使用すると、他の範囲を参照する必要があるものRange.Copyを追加できます。destination parameter構文:

Range.Copy [DestinationRange]
于 2013-10-19T12:23:35.877 に答える
0

Paste は range オブジェクトのメソッドではありません。

そのため、次のような単純なものがあります。

Sub NoGood()
    Range("A1").Copy
    Range("A2").Paste
End Sub

も失敗します。

別の方法として、2 番目のシートを選択し、2 番目のシートのセルを選択して、最後に 2 番目のシートに貼り付けます。

于 2013-10-19T12:21:44.100 に答える