以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  根据年龄获取出生日期  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=127310)

--  作者:zyxhx
--  发布时间:2018/11/10 19:30:00
--  根据年龄获取出生日期

请问老师,假设我年龄列为2岁3月15天,或为2岁,或为3岁2月,能不能根据年龄列数据获取出生日期呢?

 

请老师指点并写一下代码,谢谢!

 

学生愚钝,再追加一个问题:如果在年龄单元格只输入一个数值如1到100,按回车键后自动在数值后加上“岁”。希望用代码实现,谢谢!

[此贴子已经被作者于2018/11/10 22:08:00编辑过]

--  作者:有点甜
--  发布时间:2018/11/11 9:32:00
--  

1、参考代码

 

Dim str As String = "2岁3月15天"
Dim ary() = str.Split(new Char(){"岁", "月", "天"})
Dim d As Date = Date.Today
If str.Contains("岁") Then
    d = d.AddYears(-ary(0))
End If
If str.Contains("月") Then
    d = d.addmonths(-ary(1))
End If
If str.Contains("天") Then
    d = d.Adddays(-ary(2))
End If
msgbox(d)

 

2、看看datacolchanging事件,比如代码

 

If e.datacol.name = "年龄" AndAlso e.newvalue <> Nothing Then

    e.newvalue = e.newvalue.replace("岁", "") & "岁"

End If

 

http://www.foxtable.com/webhelp/scr/0624.htm

 


--  作者:zyxhx
--  发布时间:2018/11/11 9:56:00
--  

老师,第一个问题返回的结果没有变化,还是当天日期,应该如何修改。

 


--  作者:有点甜
--  发布时间:2018/11/11 9:59:00
--  
以下是引用zyxhx在2018/11/11 9:56:00的发言:

老师,第一个问题返回的结果没有变化,还是当天日期,应该如何修改。

 

 

不可能,认认真真测试代码。

 

如果写到datacolchanged事件,请对应修改细节。

 

贴出你写的代码,写到什么地方?


--  作者:zyxhx
--  发布时间:2018/11/11 10:07:00
--  

AfterEdit事件:

Dim str As String = e.Row("年龄")
Dim ary() = str.Split(new Char(){"岁", "月", "天"})
Dim d As Date = Date.Today
If str.Contains("岁") Then
    d = d.AddYears(-ary(0))
End If
If str.Contains("月") Then
    d = d.addmonths(-ary(1))
End If
If str.Contains("天") Then
    d = d.Adddays(-ary(2))
End If
e.Row("出生日期") =  d

 

现在可以了。

 

谢谢老师指点。

[此贴子已经被作者于2018/11/11 10:13:21编辑过]

--  作者:有点甜
--  发布时间:2018/11/11 11:42:00
--  

代码写到datacolchanged事件

 

If e.DataCol.name = "年龄" Then
    Dim str As String = e.DataRow("年龄")
    Dim ary() = str.Split(new Char(){"岁", "月", "天"})
    Dim d As Date = Date.Today
    If str.Contains("岁") Then
        d = d.AddYears(-ary(0))
    End If
    If str.Contains("月") Then
        d = d.addmonths(-ary(1))
    End If
    If str.Contains("天") Then
        d = d.Adddays(-ary(2))
    End If
    e.DataRow("出生日期") =  d
End If


--  作者:zyxhx
--  发布时间:2018/11/11 12:10:00
--  
谢谢老师!