Foxtable(狐表)用户栏目专家坐堂 → 日期列输入简化-已解決


  共有6275人关注过本帖树形打印复制链接

主题:日期列输入简化-已解決

帅哥哟,离线,有人找我吗?
realredred
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
日期列输入简化-已解決  发帖心情 Post By:2013/5/14 20:38:00 [显示全部帖子]

由于工作表需要频烦的输入日期

之前是用excel做的,输入日期只需要输入月和日,如: 5/14

就能达成  13-05-14  这种格式的日期

 

而狐表日期列,是要完整的输入 20130514才行

这样,令到我部门的美女们感到极大烦厌,而且经常入錯,如输入:130514,由于输入不完整,就会卡在那单元格  按取消才行

每天都喚著很麻烦

有沒有方法,只用输入月和日

就能帶出  年月日 " yy-mm-dd

急求!

[此贴子已经被作者于2013-5-18 11:24:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
realredred
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/5/14 21:58:00 [显示全部帖子]

以下是引用gryy在2013-5-14 21:17:00的发言:
增加辅助输入列,用于输入,日期列接受
Dim dr As DataRow = e.DataRow
Dim d As String = Date.today.year
Dim s As String= d & dr("辅助输入")
s= Mid(s,1,4) & "-" & Mid(s,5,2) & "-" & Mid(s,7,2)
dr("日期") = Cdate(s)

某程度上真的能简化了

这个思路很好,现在再加多几个条件,相信能完美简化,

上述的方法,是只要在"辅助输入"列上,输入4位数字(年和月) 如: 0514

那麼"日期"列,就能帶出 "2013-05-14"

勁!

但如果想设成输入帶有符号的,如: 05-14

把s变量 = 改一下,如 : s= Mid(s,1,4) & "-" & Mid(s,5,5)

也能做到了,

那麼,如何检测"辅助输入"列单元格是否帶有符号呢?

而当"辅助输入"列清空,能同步令"日期"列都一起清空?

 

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
realredred
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/5/14 23:57:00 [显示全部帖子]

沒办法,因为之前EXCEL的确输入日子比较方便,现在真的较烦锁
而且查找方式也不及EXCEL方便,能全表搜寻

 回到顶部
帅哥哟,离线,有人找我吗?
realredred
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/5/15 2:15:00 [显示全部帖子]

if f.len = 4  出錯,
是不是要定义 f.len 

 回到顶部
帅哥哟,离线,有人找我吗?
realredred
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/5/15 2:21:00 [显示全部帖子]

折騰出來了
应是这样

Dim message
Dim dr As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "辅助输入"
        If dr.IsNull("辅助输入") Then '如果列为空
            dr("日期") = Nothing
        End If
        
        Dim f As String = dr("辅助输入")
        If len(f) = 4
            
            Dim d As String = Date.today.year
            Dim s As String= d & dr("辅助输入")
            s= Mid(s,1,4) & "-" & Mid(s,5,2) & "-" & Mid(s,7,2)
            dr("日期") = Cdate(s)
            
        Else
            If  len(f) = 5  Then
                Dim d As String = Date.today.year
                Dim s As String= d & dr("辅助输入")
                s= Mid(s,1,4) & "-" & Mid(s,5,2) & "-" & Mid(s,8,2)
                dr("日期") = Cdate(s)
            Else
                message.show("输入错误!")
            End If
        End If
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
realredred
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/5/15 20:30:00 [显示全部帖子]

综合 yinyb36 和 gryy 狐友的方法

达到了较为完美的日子输入

ValidateEdit

输入代码:目的检测辅助输入列的键入格式是否等同日子的格式

 

If e.Col.Name = "S手雕S" Or  e.Col.Name = "S手雕F" Or  e.Col.Name = "S电雕S" Or  e.Col.Name = "S电雕F" Then
    Dim txt As String = e.Text
    Dim mt1 As String = Mid(txt,1,2 )
    Dim mt2 As String = Mid(txt,3,2 )
    Dim mt3 As String = Mid(txt,5,2 )
    Dim mt4 As String = Mid(txt,4,2 )
   
    If txt.Length = 4 Then
        If  (( mt1 = "01"  Or mt1 = "03" Or mt1 = "05" Or mt1 = "07" Or mt1 = "08" Or mt1 = "10" Or mt1 = "12" ) And  mt2 <= "31" ) Or _
            (( mt1 = "04"  Or mt1 = "06" Or mt1 = "09" Or mt1 = "11" ) And  mt2 <= "30" ) Or ( mt1 = "02" And mt2 <= "28" ) Then
            e.Text = Date.Today.Year & "-" &   Mid(txt,1,2) & "-" & Mid(txt,3,2)
        Else
            MessageBox.Show( "你输入的日子格式出錯!请以4位数字(月日)或6位数字(年月日),重新输入!")
e.Cancel = True
        End If
    ElseIf txt.Length = 6 Then
        If  (( mt2 = "01"  Or mt2 = "03" Or mt2 = "05" Or mt2 = "07" Or mt2 = "08" Or mt2 = "10" Or mt2 = "12" ) And  mt3 <= "31" ) Or _
            (( mt2 = "04"  Or mt2 = "06" Or mt2 = "09" Or mt2 = "11" ) And  mt3 <= "30" ) Or ( mt2 = "02" And mt3 <= "28" ) Then
            e.Text = "20" & Mid(txt,1,2 ) & "-" & Mid(txt,3,2) & "-" & Mid(txt,5,2)
        Else
            MessageBox.Show( "你输入的日子格式出錯!请以4位数字(月日)或6位数字(年月日),重新输入!")
e.Cancel = True
        End If
       
    ElseIf txt.Length = 5 Then
       
        If  (( mt1 = "01"  Or mt1 = "03" Or mt1 = "05" Or mt1 = "07" Or mt1 = "08" Or mt1 = "10" Or mt1 = "12" ) And  mt4 <= "31" ) Or _
            (( mt1 = "04"  Or mt1 = "06" Or mt1 = "09" Or mt1 = "11" ) And  mt4 <= "30" ) Or ( mt1 = "02" And mt4 <= "28" ) Then
            e.Text = Date.Today.Year & "-" & Mid(txt,1,5 )
        Else
            MessageBox.Show( "你输入的日子格式出錯!请以4位数字(月日)或6位数字(年月日),重新输入!")
e.Cancel = True
        End If
       
    ElseIf txt.Length > 0 And txt.Length <= 3 Then
        MessageBox.Show( "你输入的日子格式出錯!请以4位数字(月日)或6位数字(年月日),重新输入!")
e.Cancel = True       
    End If
End If

 

这样,在辅助列输入4位数 " 0515"  ,帶字符的5位数"05-15" 或 帶年份的6位数 "130515"

都会转化为"2013-05-15"

 

然后再用 gryy 的方法

把辅助列的值  .转为正常日子列里,假如输入的是不正常数值,如:"130231"

就提示出錯並需要更正为正常日子值.

 

 

虽然转了一个大弯,但总算滿足到美女们的懶惰输入方式了,

感谢各狐友提供方法和思路

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
realredred
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/5/15 22:30:00 [显示全部帖子]

写在这里

表属性的

datacolchanged

[此贴子已经被作者于2013-5-15 22:30:56编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
realredred
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2013/6/5 18:42:00 [显示全部帖子]

我早已写了一个  不过比ISY老師的笨呆一点的

 

'ValidateEdit


'执版简易日子输入
Dim nms() As String = { "S交货期" }

For Each nm As String In nms
    If e.Col.Name = nm Then

        Dim txt As String = e.Text
        Dim mt1 As String = Mid(txt,1,2 ) '4位数取月份
        Dim mt2 As String = Mid(txt,3,2 ) '4位数取日 , 6位数取月份
        Dim mt3 As String = Mid(txt,5,2 ) '6位数取日
        Dim mt4 As String = Mid(txt,4,2 ) '5位数取日
        Dim mt5 As String = Mid(txt,6,2 ) '10位数帶"-" 取月份
        Dim mt6 As String = Mid(txt,9,2 ) '10位数帶"-" 取日
        Dim mt7 As String = Mid(txt,5,1 ) '10位数帶"-" 取年后的"-"
        Dim mt8 As String = Mid(txt,8,1 ) '10位数帶"-" 取年后的"-"
        If txt.Length = 4 Then
            If  (( mt1 = "01"  Or mt1 = "03" Or mt1 = "05" Or mt1 = "07" Or mt1 = "08" Or mt1 = "10" Or mt1 = "12" ) And  mt2 <= "31" ) Or _
                (( mt1 = "04"  Or mt1 = "06" Or mt1 = "09" Or mt1 = "11" ) And  mt2 <= "30" ) Or ( mt1 = "02" And mt2 <= "28" ) Then
                e.Text = Date.Today.Year & "-" &   Mid(txt,1,2) & "-" & Mid(txt,3,2)
            Else
                MessageBox.Show( "你输入的日子格式出错!请以4位数字(月日)或6位数字(年月日),重新输入!")
                e.Cancel = True
            End If
        ElseIf txt.Length = 6 Then
            If  (( mt2 = "01"  Or mt2 = "03" Or mt2 = "05" Or mt2 = "07" Or mt2 = "08" Or mt2 = "10" Or mt2 = "12" ) And  mt3 <= "31" ) Or _
                (( mt2 = "04"  Or mt2 = "06" Or mt2 = "09" Or mt2 = "11" ) And  mt3 <= "30" ) Or ( mt2 = "02" And mt3 <= "28" ) Then
                e.Text = "20" & Mid(txt,1,2 ) & "-" & Mid(txt,3,2) & "-" & Mid(txt,5,2)
            Else
                MessageBox.Show( "你输入的日子格式出错!请以4位数字(月日)或6位数字(年月日),重新输入!")
                e.Cancel = True
            End If
           

           
        ElseIf txt.Length = 10 Then
           
            If  (mt7 = "-" And mt8 = "-") And (( mt5 = "01"  Or mt5 = "03" Or mt5 = "05" Or mt5 = "07" Or mt5 = "08" Or mt5 = "10" Or mt5 = "12" ) And  mt6 <= "31" ) Or _
                (mt7 = "-" And mt8 = "-") And (( mt5 = "04"  Or mt5 = "06" Or mt5 = "09" Or mt5 = "11" ) And  mt6 <= "30" ) Or (mt7 = "-" And mt8 = "-") And ( mt5 = "02" And mt6 <= "28" ) Then
                e.Text = txt
            Else
                MessageBox.Show( "你输入的日子格式出错!请以4位数字(月日)或6位数字(年月日),重新输入!")
                e.Cancel = True
            End If
           
           
        ElseIf txt.Length > 0 And txt.Length <= 3  Or  txt.Length = 5 Or  txt.Length > 6 And txt.Length <= 9 Then ' Or txt.Length > 10 Then
            MessageBox.Show( "你输入的日子格式出错!请以4位数字(月日)或6位数字(年月日),重新输入!")
            e.Cancel = True
           
        End If
    End If
Next


 回到顶部