繁体   English   中英

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

[英]VBA Copy Cells + Formatting without using the clipboard

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

这是我目前尝试的方法,有什么想法可以满足我的需求?

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

您的示例代码将格式定义为“文本,常规,时间,日期等” 虽然可以很容易地容纳数字格式 (单元格属性的子集),但是当可以携带所有相关( 非默认 )属性时,进一步深入枚举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而不是.Values执行跨单元格值的传输。

我偶尔会看到这个问题,恕我直言,这个问题的来源很可能是a)一位老师认为这是一种可爱的方法,可以让学生欣赏Range.Cells对象有多少个属性,子属性和内部子子属性( 范围成员(Excel)包含或b)拥有新鲜的MBA的白痴想要证明他们比IT部门更聪明。 当剪贴板可用时,枚举单元格可能包含的所有可能的格式设置属性只是傻瓜的事情(再次是恕我直言)。

如果您自己尝试进行此操作,请不要忘记条件格式和注释,它们都可以很容易地归为单元格格式的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM