0

私はスクリプトを持っています。これは非常に単純なスクリプトで、はるかに大きなスクリプトの一部です。現在、この最後のビットで問題が発生していますが、その理由はわかりません。

これは私に問題を与えているスクリプトの一部です。

Option Explicit


Sub Test()

    Dim wsJL As Worksheet 'Jobs List
    Dim lastrow As Long    
    Set wsJL = Sheets("Jobs List")

    lastrow = wsJL.Range("B" & Rows.Count).End(xlUp).Row
    wsJL.Range("B3:N3").Copy
    wsJL.Range("B4:N" & lastrow).PasteSpecial xlPasteFormats

End Sub

これがワークブックです。

https://dl.dropbox.com/u/3327208/Excel/format.xlsm

私がしていることを私が知る限り、起こってはならない。何が起こっているのかというと、フォーマットを最初にコピーされたものに置き換えるのではなく、すべてを上書きします。

誰かがこれを再現して、私の間違いがどこにあるか教えてもらえますか?

ありがとう。

4

1 に答える 1

2

コピー&ペーストせずに同じことができます。もう少しコードが必要ですが、クリップボードを使用せず、シート上の何も選択しません。

それは劇的に速く実行されます。これがあなたの仕事用コンピュータであなたがすでに試したものよりもうまくいくかどうか知りたいです。

これを試して:

Sub WriteInsteadOfCopyFormatting()

    Dim wsJL As Worksheet 'Jobs List
    Dim rng As Range ' Columns B through N
    Dim dateRng As Range ' Column F
    Dim numbersRng As Range ' Columns J through L
    Dim NCMRRng As Range ' Column M

    Dim lastRow As Long
    Dim firstCopyRow As Long

    Set wsJL = Sheets("Jobs List")

    lastRow = wsJL.Range("B" & Rows.Count).End(xlUp).Row
    firstCopyRow = 4
    Set rng = wsJL.Range("B" & firstCopyRow & ":N" & lastRow)
    Set dateRng = wsJL.Range("F" & firstCopyRow & ":F" & lastRow)
    Set numbersRng = wsJL.Range("J" & firstCopyRow & ":J" & lastRow)
    Set NCMRRng = wsJL.Range("M" & firstCopyRow & ":M" & lastRow)

    With rng
        .Interior.Color = 16777215
        .Font.Name = "Calibri"
        .Font.Size = 11
        .Font.Color = vbBlack
        .BorderAround Weight:=xlThin, Color:=vbBlack
    End With
    With rng.Borders(xlInsideVertical)
        .Weight = xlThin
        .Color = vbBlack
    End With
    With rng.Borders(xlInsideHorizontal)
        .Weight = xlThin
        .Color = vbBlack
    End With

    dateRng.NumberFormat = "d/mm/yyyy"
    numbersRng.NumberFormat = "#,##0"
    NCMRRng.NumberFormat = "0######"

End Sub
于 2012-09-20T01:57:36.927 に答える