dan*_*974 11 excel vba excel-vba
希望有人可以帮忙!
我有一个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"
Run Code Online (Sandbox Code Playgroud)
到目前为止,这项工作正常!由于某些原因,虽然并非所有范围内的单元格都应用了正确的格式,但它们看起来15/04/2014并非如此2014-04-15.如果我手动选择单元格然后按F2那么ENTER键,格式就会出现.这种情况在整个范围内随机发生,可能有数千行,因此虽然工作表在每一行上手动点击F2+ ENTER,但拖网不实用.
我已经通过互联网查看帮助,发现我认为应该自动使用vba编码F2+ ENTER位,但它无法工作,我看不清楚原因(我是VBA的初学者!)
下面的代码粘贴是我到目前为止,它是从更大的代码行中提取的,因此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
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,数据会复制到我的工作表中,但日期和时间仍然是混合格式.通过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
Run Code Online (Sandbox Code Playgroud)
任何帮助都会非常感谢Dan
我使用这个简单的宏在当前选择的范围上应用F2+ Enter:
Sub ApplyF2()
Selection.Value = Selection.FormulaR1C1
End Sub
Run Code Online (Sandbox Code Playgroud)
我也努力让它发挥作用。我的问题不仅仅是日期,还有前面带有单引号的数据。我一起编写的内容对我来说非常有用。它可以非常快速地清理 70,000 多个细胞。希望对你有帮助:
(您将更改范围等以满足您的需要)
Dim MyRange As Range
Set MyRange = Range(Cells(2, 7), [G1].End(xlDown))
For Each MyRange In MyRange.Cells
'Mimic F2 without SendKeys
MyRange.Value = MyRange.Value
Next
Run Code Online (Sandbox Code Playgroud)
您需要发送 F2 + Enter 键,这似乎很奇怪。运行宏之前的格式是什么?尝试以这种方式设置整个列的格式(不会影响文本)。
Columns("C:C").NumberFormat = "yyyy-mm-dd"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49427 次 |
| 最近记录: |