我有一个相当简单的vba脚本,它将一个工作表中的一个范围的trasposed值复制到另一个,这里是相关的代码:
wb.ActiveSheet.Range("D2", "D32").Copy
cwb.ActiveSheet.Range("B10").PasteSpecial Paste:=xlPasteValues, Transpose:=True
源范围是未格式化的文本(无法控制),但它是时间 (xx:xx)
,而目标被适当地预格式化为时间 (xx:xx)
.
似乎目标范围中的值被视为纯字符串,而不是根据指定的规则进行格式化 . 只要我选择一个单元格并按Enter键,就会应用格式 .
当我在vba中粘贴范围时,如何触发相同的行为?不应要求用户确认每个单元格 .
我应该补充一点,这也导致一些计算失败,因为要优于那些不是数字 .
3 回答
在您的情况下,常规 Copy >> PasteSpecial 将不起作用,您需要将输入为
String
的时间转换为时间格式,实际上是从0到1的十进制值 . 您可以使用TimeValue
函数来实现它 .因此,您需要
Set
CopyRng
对象到您要复制的范围,并循环遍历它,每个单元格使用TimeValue
将字符串转换为时间格式 .Code
Shai Rado之前的回答是有效的,但有一个重大的回归,它是我读我写作业 . 我还建议使用
TimeValue
函数,但只有一个读/写如下:执行:
您可以尝试添加以下代码(未测试):