这是一个简单的宏,可以在从 SSMS 粘贴数据后运行。如果您将其复制到您的 PERSONAL.XLSB 文件并将按钮添加到快速访问工具栏或功能区中的新自定义组/选项卡,这是最简单的。粘贴后立即运行宏,同时仍选择数据。如果在数据中选择了单个单元格,它也可以运行 - 它会在运行之前自动选择当前区域(与 ctrl-a 相同)。要仅对数据子集运行宏,请在运行前选择所需的子集。它可以处理包括或不包括标题的数据,但假设当前区域中至少有 2 行。
它有效地测试每一列以查看第一个非 NULL 值是否看起来是奇怪格式的日期/时间值。如果是,它会将整个列设置为默认的系统日期/时间格式,即使您的日期格式是“d/m/y”。
Sub FixSSMSDateFormats()
'Intended for copied data from SSMS and handles headers included
'For selection or current area, checks each column...
' If the first non-NULL value is in strange time format, then change entire column to system date/time format
Dim values As Variant, r As Long, c As Long
If Selection.Count = 1 Then Selection.CurrentRegion.Select
values = Selection.Value
For c = 1 To UBound(values, 2)
For r = 2 To UBound(values, 1)
If TypeName(values(r, c)) = "Double" Then
If values(r, c) > 1 And Selection(r, c).NumberFormat = "mm:ss.0" Then
Selection.Columns(c).NumberFormat = "m/d/yyyy h:mm"
End If
Exit For
ElseIf values(r, c) <> "NULL" Then
Exit For
End If
Next
Next
End Sub