我有一个脚本,一个非常简单的脚本,它是一个更大的脚本的一部分,现在最后一点给了我一些问题,我不知道为什么。
这是脚本中给我带来问题的部分。
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 :(得分: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