我有一个 Excel 2010 工作表,其中包含用于将其他工作表中的数据复制到另一个工作表上的特定格式的宏。
数据副本,但我对保存日期或时间值的单元格范围的格式有疑问。
数据源自数据库提取,所有内容均为文本格式。在我的工作表中,当我复制日期(通过 VBA)时,我对日期应用格式 "yyyy-mm-dd"
,对日期应用格式 "hh:mm.ss.ss"
次。
行数从来没有固定数量,因此我设置了 VBA 代码以将格式应用于单元格范围,例如:
AssDateLastRow = shAss.Range("C" & Rows.Count).End(xlUp).Row
shAss.Range("C4:C" & AssDateLastRow).NumberFormat = "yyyy-mm-dd"
并非该范围内的所有单元格都具有正确的格式,它们将显示为 15/04/2014
而不是 2014-04-15
。如果我手动选择单元格并按 F2 然后按 ENTER 键,格式将根据我的需要显示。这种情况在整个范围内随机发生,并且可能有数千行,因此在每个行上手动按 F2+ENTER 遍历工作表是不切实际的。
我在互联网上查找,发现应该使用 VBA 自动执行 F2+ENTER 操作。
下面的代码是从更大的代码行中提取的,因此 Dim
语句等在实际副本中更靠前,但这应该显示我解决这个问题的方式,所以远。
Dim shAss As Worksheet
Dim AssDateLastRow As Long
Dim c As Range
'enter method to format 'Date Craftperson Assigned' and 'Time Craftperson Assigned' in Assignments sheet
'column "C" and "D", to formats required by Archibus: date "yyyy-mm-dd", time "hh:mm.ss.ss"
AssDateLastRow = shAss.Range("C" & Rows.Count).End(xlUp).Row
shAss.Range("C4:C" & AssDateLastRow).NumberFormat = "yyyy-mm-dd"
'ensure format is applied by forcing F2 edit of cell
For Each c In shAss.Range("C4:C" & AssDateLastRow).Cells
c.Select
SendKeys "{F2}", True
SendKeys "{ENTER}", True
'Selection.NumberFormat = "yyyy-mm-dd"
Next
当我运行代码时,数据会复制到我的工作表中,但日期和时间仍采用混合格式。
通过 VBA 强制按 F2+ENTER 的尝试似乎没有做任何事情。如果手动完成,则可以正常工作。
下面是从工作表中的结果复制的数据示例
Work Request Code Date Assigned Time Assigned
92926 19/05/2014 14:30.00.00
92927 19/05/2014 15:00.00.00
92928 2014-05-19 15:15.00.00
92934 2014-05-19 14:00.00.00
92527 12/05/2014 07:30
92528 12/05/2014 08:00
92804 2014-05-12 16:15
92805 2014-05-12 16:20.00.00
最佳答案
我使用这个简单的宏在当前选定的范围上应用F2 + Enter:
Sub ApplyF2()
Selection.Value = Selection.FormulaR1C1
End Sub
关于excel - 在单元格范围上强制 "F2"+"Enter",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24060831/