Excel 2010宏在单元格区域上强制"F2"+"Enter"

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

Tho*_* F. 9

我使用这个简单的宏在当前选择的范围上应用F2+ Enter:

Sub ApplyF2()
    Selection.Value = Selection.FormulaR1C1
End Sub
Run Code Online (Sandbox Code Playgroud)


Tap*_*nic 6

我也努力让它发挥作用。我的问题不仅仅是日期,还有前面带有单引号的数据。我一起编写的内容对我来说非常有用。它可以非常快速地清理 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)


Mat*_*ann 0

您需要发送 F2 + Enter 键,这似乎很奇怪。运行宏之前的格式是什么?尝试以这种方式设置整个列的格式(不会影响文本)。

Columns("C:C").NumberFormat = "yyyy-mm-dd"
Run Code Online (Sandbox Code Playgroud)

  • 我们已经格式化了列,这样,当您查看单元格格式时,它显示为我们想要的格式(yyyy-mm-dd),但单元格中的实际数据显示为 dd/mm/yyyy,但作为提到如果我们手动使用 F2+Enter 它可以将单元格中的外观设置为正确的格式。我们只是想尝试自动化该过程 (3认同)