编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> 其它语言 -> 通过VBA,当在EXCEL单元格中输入任意的日期格式时,都能自动转换为指定的标准格式的日期值 -> 正文阅读

[其它语言]通过VBA,当在EXCEL单元格中输入任意的日期格式时,都能自动转换为指定的标准格式的日期值

      在日常录入EXCEL表格的单元格里 ,我们输入一些一般性的日期内容,如:2017-10-17 或 2017/10/17时,EXCEL会自动识别为日期并按单元格设计格式显示,单元格中存储的值也是日期格式的值。 
      但我们进行不规范的日期输入时,如在单元格中输入:2017.10.10或2017。10。10或20171010时,EXCEL不会自动识别这些内容为日期,而只会识别为字符串(文本),且在单元格中存储的也只是文本而已。
      我们通过编写VBA代码可以轻松解决此问题,让EXCEL完美识别输入的任何日期内容,不管是20171010或2017.10.10还是201711或20170101或2017131都可被正确识别,而且是直接将单元格中存储的值转换为日期值,不仅仅是显示格式的转换。
      闲话不说,直接让VBA代码:
      (要录入VBA代码,必须通过EXCEL进入VBA编辑器,这部分内容可搜索下)
      

'以下代码都要放到一个sheet的类模块之中
Dim nDate
Private Sub Worksheet_Activate()'加载sheet的事件
    nDate = InputBox("请确定此工作表中第几列为日期型的数据!", "输入数字", "2")
    If nDate = "" Then
        nDate = 2 '--只操作指定的列号的列,目前只操作B列(第2列)
    Else
        nDate = Val(nDate)
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)'--sheet中任何地方发生数据改变时触发的事件
    If nDate = 0 Then Exit Sub
    If Target.Cells.Column = nDate Then '--如果是第二列才检验文本为日期
        Target.Value = TryChangeDate2(Target.Value)
    End If
End Sub
Public Function TryChangeDate2(ByVal strDATEcome As String) As Variant
    On Error GoTo TryChangeDate2ERR
    Dim strDATE As String
    strDATE = Trim(strDATEcome)
    Dim myDate As Date
    Dim strK As String
    strK = mTrim(strDATEcome)
    Dim k As Integer, nkkkk As Integer
    k = -1
k0:
    k = 0
    myDate = DateValue(strDATE)
    myDate = Format(myDate, "yyyy/m/d")
    TryChangeDate2 = myDate
    Exit Function
k1:
    k = 1
    myDate = DateValue(strDATE)
    myDate = Format(myDate, "yyyy/m/d")
    TryChangeDate2 = myDate
    Exit Function
TryChangeDate2ERR:
    Err.Clear
    If k = 0 Then
        nkkkk = Len(strK)
        Select Case nkkkk
            Case 4
                If InStr(1, strK, ".") = 0 And InStr(1, strK, ",") = 0 And InStr(1, strK, "/") = 0 And InStr(1, strK, "\") = 0 And InStr(1, strK, "-") = 0 Then
                    strDATE = Left(strK, 2) & "/" & Mid(strK, 3, 1) & "/" & Mid(strK, 4, 1)
                End If
            Case 5
                If InStr(1, strK, ".") = 0 And InStr(1, strK, ",") = 0 And InStr(1, strK, "/") = 0 And InStr(1, strK, "\") = 0 And InStr(1, strK, "-") = 0 Then
                    If Val(Mid(strK, 3, 1)) >= 3 Then
                        strDATE = Left(strK, 2) & "/" & Mid(strK, 3, 1) & "/" & Mid(strK, 4, 2)
                    Else
                        strDATE = Left(strK, 2) & "/" & Mid(strK, 3, 2) & "/" & Mid(strK, 5, 1)
                    End If
                End If
            Case 6
                If InStr(1, strK, ".") = 0 And InStr(1, strK, ",") = 0 And InStr(1, strK, "/") = 0 And InStr(1, strK, "\") = 0 And InStr(1, strK, "-") = 0 Then
                    If Left(strK, 1) = "1" Or Left(strK, 1) = "2" Then
                        strDATE = Left(strK, 4) & "/" & Mid(strK, 5, 1) & "/" & Mid(strK, 6, 1)
                    Else
                        strDATE = Left(strK, 2) & "/" & Mid(strK, 3, 2) & "/" & Mid(strK, 5, 2)
                    End If
                    GoTo theEnd
                End If
                    strDATE = Left(strK, 2) & "/" & Mid(strK, 4, 1) & "/" & Mid(strK, 6, 1)
            Case 7
                If InStr(1, strK, ".") = 0 And InStr(1, strK, ",") = 0 And InStr(1, strK, "/") = 0 And InStr(1, strK, "\") = 0 And InStr(1, strK, "-") = 0 Then
                    If Val(Mid(strK, 5, 1)) >= 3 Then
                        strDATE = Left(strK, 4) & "/" & Mid(strK, 5, 1) & "/" & Mid(strK, 6, 2)
                    Else
                        strDATE = Left(strK, 4) & "/" & Mid(strK, 5, 2) & "/" & Mid(strK, 7, 1)
                    End If
                Else
                    If Val(Mid(strK, 4, 1)) >= 3 Then
                        strDATE = Left(strK, 2) & "/" & Mid(strK, 4, 1) & "/" & Mid(strK, 6, 2)
                    Else
                        strDATE = Left(strK, 2) & "/" & Mid(strK, 4, 2) & "/" & Mid(strK, 7, 1)
                    End If
                End If
            Case 8
                If InStr(1, strK, ".") = 0 And InStr(1, strK, ",") = 0 And InStr(1, strK, "/") = 0 And InStr(1, strK, "\") = 0 And InStr(1, strK, "-") = 0 Then
                    strDATE = Left(strK, 4) & "/" & Mid(strK, 5, 2) & "/" & Mid(strK, 7, 2)
                Else
                    strDATE = Left(strK, 4) & "/" & Mid(strK, 6, 1) & "/" & Mid(strK, 8, 1)
                End If
            Case 9
                If Val(Mid(strK, 6, 1)) >= 3 Then
                    strDATE = Left(strK, 4) & "/" & Mid(strK, 6, 1) & "/" & Mid(strK, 8, 2)
                Else
                    strDATE = Left(strK, 4) & "/" & Mid(strK, 6, 2) & "/" & Mid(strK, 9, 1)
                End If
            Case 10
                strDATE = Left(strK, 4) & "/" & Mid(strK, 6, 2) & "/" & Mid(strK, 9, 2)
        End Select
theEnd:
        GoTo k1
    End If
    TryChangeDate2 = strDATEcome
End Function

Public Function mTrim(ByVal strCome As String) As String '--此函数的作用是去掉字符串中间的空格 On Error GoTo mTrimErr Dim i As Integer, j As Integer Dim strLS As String, k As String * 1, strResult As String strLS = Trim(strCome) strResult = "" j = Len(strLS) For i = 1 To j k = Mid(strLS, i, 1) If k <> " " And k <> " " And VarType(k) <> vbNull And k <> vbNullString Then strResult = strResult & k End If Next mTrim = strResult Exit Function mTrimErr: Err.Clear mTrim = strCome End Function

'---以上代码可实现在EXCEL指定列(上面指定为B列)中录入日期内容时,任意可识别的日期都会被自动转换成标准日期值,并以日期值存储在单元格中
'---欢迎大家批评指正,如果发现错误,欢迎指正,如有不明子的地方,欢迎交流
'--QQ: 578652607

  其它语言 最新文章
markdown入门杂记
Oracle数据库的安装
PHP 中 SESSION 反序列化机制
开发Maven插件
bat脚本:windows下一键启动zookeeper+kafka
3.指针
java分页三个类 PageBean ResponseUtil Str
c语言函数传参详解
自动扫描和暴力破解
汇编语言之寻址方式
上一篇文章           查看所有文章
加:2017-10-11 23:25:40  更:2017-10-11 23:25:47 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 日历 万年历 2019年10日历
2019-10-19 21:18:24
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识