0

ヘッダーと一連のデータを印刷用の新しいワークシートにコピーしようとしています。

データを細かくコピーできますが、列幅が失われ、自動調整を実行するとページが再び壊れます。ページが最初に設計されたとき、列幅は手動で手動で設定されました。

現在私は持っています:

Dim tmp As Worksheet
Set tmp = Sheets.Add(after:=ActiveSheet)
RD.Copy tmp.Range("A1") ' Range data (set elsewhere)
RH.Copy tmp.Range("A1") ' Range header (set elsewhere)

xlPasteSpecial と xlPasteAll を使用してみましたが、クリップボードの使用中に違いはありません。

シート間でセル幅をコピーするにはどうすればよいですか?

4

2 に答える 2

3

グラハム、

範囲をコピーした後、宛先範囲の列番号を取得してから、.ColumnWidth プロパティをコピーしてソース範囲の列を反復処理します...

Dim RD As Range
Dim RH As Range

Set RH = Cells.Range("A1:C1")
Set RD = Cells.Range("A2:C2")

Dim tmp As Worksheet
Set tmp = Sheets.Add(after:=ActiveSheet)
RD.Copy tmp.Range("A1") ' Range data (set elsewhere)'
RH.Copy tmp.Range("A2") ' Range header (set elsewhere)'

' Get the column number of the first cell in the destination range'
' because it looks like we are just setting the first cell of the destination range'
' and letting Excel roll the range over'
Dim tmpCol As Integer
tmpCol = tmp.Range("A1").Cells(1, 1).Column ' make sure you use the same range value'

Now loop through the source columns setting the dest column to the same width.
For Each objCol In RH.Columns

    tmp.Columns(tmpCol).ColumnWidth = objCol.ColumnWidth
    tmpCol = tmpCol + 1

Next
于 2009-07-03T14:41:17.823 に答える
3

ソースの列をループして、ターゲット範囲の対応する ColumnWidths を設定できます。

Dim i As Integer
For i = 1 To sourceRange.Columns.Count
    targetRange.Columns(i).ColumnWidth = sourceRange.Columns(i).ColumnWidth
Next
于 2009-07-03T14:16:53.340 に答える