我发现 excel 表格中的这一点非常奇怪(或者可能只是我个人的感受),默认情况下,excel 表格中的所有单元格都是常规格式 (G),当我在单元格中输入日期值 (1/1/2012) 时,格式会更改为日期 (D4),这很完美。但是当我将值改回某个文本值(例如:train)时,格式不会更改为常规格式(或文本格式),它仍然保持为日期格式 (D4)。
当单元格的值从日期更改为文本时,我是否应该启用 Excel 中的任何设置以将格式从日期更改为常规?
任何帮助都将受到高度赞赏。
答案1
不可以,你不能这么做。这是一次性的事情。
答案2
你考虑过这个吗反而?
更改 NumberFormat进入每次将单元格设置为“常规”NumberFormat。
(无论如何,您都必须进入编辑模式才能将日期更改为文本,因此并没有太大区别)
而不是检查格式时离开细胞。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ActiveCell.NumberFormat = "General"
End Sub
当然,这可能会产生其他问题,例如您不想将其作为“常规”的其他单元格,但您可以通过测试轻松排除范围......
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveCell.Column <> 4 Then
ActiveCell.NumberFormat = "General"
End If
End Sub
当您在 ActiveCell 中输入日期时,Excel 仍会在您退出时将其转换为日期格式,但由于它是一种以序列号开头的“常规”格式,所以不会转换为日期,这似乎是您现在遇到的问题。
最大的缺点是选择现有日期会将其转换为“常规”,但如果您在退出之前忘记注意日期,则仍然可以在单元格中右键单击并将其格式化为日期。
如果你仍然想探索格式化单元格,你也可以尝试这个
将当前 ActiveCell 作为公共变量存储在模块中,以便当您离开它时可以使用它来检查它是否是日期格式
Cell 函数可能是测试日期格式最简单的方法
aCell = Application.Evaluate("=CELL(""format""," & previousCell & ")")
If Left(aCell, 1) <> "D" Then previouseCell.NumberFormat = "General"
答案3
您还可以使用此工作表函数:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not IsNumeric(Target.Value) And Not IsDate(Target.Value) Then
Target.NumberFormat = "General"
End If
End Sub
如果值是字符串,则将设置常规格式。