VBA复制单元格+格式化而不使用剪贴板

时间:2015-01-26 06:09:37

标签: excel vba excel-vba excel-2010 excel-2007

我正在尝试将单元格从一张纸复制到另一张纸而不将内容复制到剪贴板,但它必须复制格式。

以下是我目前尝试过的方法,任何想法如何满足我的需求?

LastRow = ThisWorkbook.Sheets("Nas").Range("A65536").End(xlUp).Row

'Option 1, works but it's using the clipboard :/
ThisWorkbook.Sheets("Nas").Range("A" & 6 & ":F" & LastRow).Copy
ThisWorkbook.Sheets("Test").Range("A" & 6 & ":F" & LastRow).Offset(-5, 0).PasteSpecial

'Option 2, works but doesn't take formatting (ie text, general, time, date... etc)
Set Src = ThisWorkbook.Sheets("Nas").Range("A" & 6 & ":F" & LastRow)
Set Dst = ThisWorkbook.Sheets("Test").Range("A" & 6 & ":F" & LastRow).Offset(-5, 0).Resize(Src.Rows.Count, Src.Columns.Count)
Dst.Value = Src.Value

'Option 3, works but doesn't take formatting (ie text, general, time, date... etc)
ThisWorkbook.Sheets("Test").Range("A" & 6 & ":F" & LastRow).Offset(-5, 0) = ThisWorkbook.Sheets("Nas").Range("A" & 6 & ":F" & LastRow).Values

1 个答案:

答案 0 :(得分:2)

您的示例代码将格式定义为" text,general,time,date ... etc" 。虽然可以轻松地容纳数字格式(单元格的属性的子集),但仍需深入研究枚举{{1}的大量属性和子属性当使用剪贴板通过复制/粘贴操作轻松传输所有相关(非默认)属性时,对象会适得其反。

Cells

请注意,使用With ThisWorkbook.Sheets("Nas") LastRow = .Range("A" & .Rows.Count).End(xlUp).Row ThisWorkbook.Sheets("Test").Range("A6:F" & LastRow).Offset(-5, 0) = _ .Range("A6:F" & LastRow).Value ThisWorkbook.Sheets("Test").Range("A6:F" & LastRow).Offset(-5, 0).NumberFormat = _ .Range("A6:F" & LastRow).NumberFormat End With .Value而不是.Value2执行传输单元格的值。

我偶尔会看到这个问题弹出窗口和恕我直言,这个问题的来源很可能是a)一位老师认为这是一种让学生了解有多少属性,子属性和内部子属性的可爱方式{{ 1}}对象(Range Members (Excel))包含或b)一些新鲜MBA的白痴想要证明他们比IT部门聪明。当剪贴板可用时,枚举单元格可能包含的每个可能的格式属性只是一个傻瓜的差事(再次恕我直言)。

如果您自己尝试这样做,请不要忘记条件格式和注释,这两者都可以轻松地归结为单元格格式的一部分。