2012-09-19 82 views
0

我有一個腳本,一個非常簡單的腳本,它是一個更大的腳本的一部分,現在這最後一點給我的問題,我不知道爲什麼。使用VBA複製格式

這是給我的問題的腳本的一部分。

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

至於我可以告訴我在做什麼不應該發生。所發生的是覆蓋所有內容,而不是用最初複製的格式來替換格式。

有人可以試圖重現這一點,並告訴我我的錯誤在哪裏?

謝謝。

+0

此代碼看起來還好。你確定這是不起作用的部分嗎?你可以嘗試在你的工作表上運行這個確切的代碼嗎? (對不起,我無法從當前機器上下載你的文件來測試...) –

+3

我剛剛運行它,它看起來不錯。複製格式,直到「lastrow」。未將第3行的任何數據複製到其他行。我甚至改變了一些格式來測試。工作。 –

+0

明天我會在工作中嘗試它,我的電腦有時會在工作中變得有趣。我不知道爲什麼,但它確實如此。呃......感謝我認爲它看起來不錯的試驗,我只需要一個驗證。 –

回答

1

您可以在不復制和粘貼的情況下做同樣的事情。它需要更多的代碼,但不使用剪貼板,也不會在表單上選擇任何內容。

它運行得更快。我很想知道你的工作計算機上的這個工作是否比你已經嘗試過的更好。

試試這個:

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 
+0

我可以,但我想簡化我的代碼。 –

+0

我試過它的S&G,它移動得更快一點,但還不足以保證額外的代碼。 –

+1

請注意,使用剪貼板進行復制和粘貼與選擇相同,並且在代碼中選擇應該(幾乎總是可以避免)。閱讀此優秀的主題了解更多詳情:http://stackoverflow.com/q/10714251/138938 –