ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 26854|回复: 49

[分享]在窗体的文本框中实现日期的输入的几种方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-7-23 10:28 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:窗体

上传的附件,窗体的文本框的日期是通过日历控件来输入日期的,且禁止通过手工在文本框中输入字符,且通过日历控件来输入的日期必须介于公元 1980 年 1 月 1 日到 2079 年 12 月 31 日之间。但存在一个问题:如果把这个文档放到没有安装日历控件的电脑上,就无法运行,提示无法装载这个对象。

为了克服这个障碍,我想去掉日历控件,且限制输入其它内容。以下的图片是从一个软件上截下来的,在这个软件中的“签约日期”的文本框中,初始时显示的内容是“0000-00-00”,输入的月份不能超过12,输入的日子不能超过对应年和月的最后一天。如何在VBA窗体的文本框上也实现这种功能?请大家出手相助,帮忙解决,谢谢!

jzMLA1ix.rar (10.63 KB, 下载次数: 901)

------------------------------------------------------------------------------------------------------

经过大家的探讨,除了用日历控件的方法外,还可以有以下几种方法:

方法一:用三个文本框来实现 ,见 第23楼

方法二:用三个文本框加一个标签来实现 ,见 第29楼 或 第34楼

方法三:用三个复合框来实现,见 第32楼

方法四:ldhyob 版主 利用一个文本框结合Change和KeyPress事件来实现,见 第35楼

方法五:利用 DTPicker 控件进行时间录入,见 第40楼

大家还有什么好的方法,请上传您的好作品与大家分享快乐,谢谢!

[此贴子已经被作者于2005-7-26 15:39:06编辑过]

如何在窗体的文本框中实现日期的输入?

如何在窗体的文本框中实现日期的输入?

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-23 10:44 | 显示全部楼层
初始时显示的内容是“0000-00-00”如何实现,而且在任何时候“0000-00-00”是不能被删除的,只能删除大于0的数字。还有,要输入四位年份的数字后,直接跳过“-”到月份,输入两位楼的月份后,直接跳过“-”到日子。还有,还要限制输入的日子不能超过对应年份和月份的最后一天,两位考虑的问题好像不周全,请继续帮忙,谢谢!

TA的精华主题

TA的得分主题

发表于 2005-7-23 11:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

在窗体Initialize事件中加入语句:判断文本框为空,就指定文本框值为0000,00和00.

这样加上楼上的做法,应该是满足楼主要求了.

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-23 11:12 | 显示全部楼层
plxmm 这个变通的方法很好,但要写很多代码,正在写代码。如果能在一个文本框中实现就更好了。

TA的精华主题

TA的得分主题

发表于 2005-7-23 11:16 | 显示全部楼层
用left和&"-"试~,看能在一个文本框实现不

TA的精华主题

TA的得分主题

发表于 2005-7-23 11:17 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-23 11:30 | 显示全部楼层
以下是引用清风_ll在2005-7-23 11:17:21的发言: 建议使用MaskedBox控件
请教 清风 兄,用 MaskedBox控件 是否要在每台电脑使用前先引用或注册 MaskedBox 控件才能使用?如果要引用或注册,还是不够大众化,主要是为了让其他的电脑都能运行文档。

TA的精华主题

TA的得分主题

发表于 2005-7-23 11:44 | 显示全部楼层
如果你有这个控件,不妨用了传上来,看看我要不要注册,也想用了试试

TA的精华主题

TA的得分主题

发表于 2005-7-23 11:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

清風大師即然有這麼好的控件提供分享一下吧

另 foshan 兄做的也不錯

[此贴子已经被作者于2005-7-23 11:49:39编辑过]

TA的精华主题

TA的得分主题

发表于 2005-7-23 11:54 | 显示全部楼层

Microsoft Masked Edit Control

控件:MSMASK32.OCX

系统文件夹中找找吧,应该有的

使用 MaskedEdit 控件

MaskedEdit 控件用于提示用户掩码模板输入数据。它也可用于提示输入日期、货币和时间,或者将输入的数据转换为全是大写或小写字符的字符串。例如,要提示用户输入电话号码,可以创建下面的输入模板:“(___) - ___ - ____”。如果不使用输入模板,则 MaskedEdit 控件的行为与标准文本框相似。

用 Mask 属性定义了输入模板之后,MaskedEdit 控件中的每个字符,都映射为指定类型的占位符,或文字字符。文字字符串,或称文字,给出了有关所用数据类型的可视线索。例如,括住电话号码区号的括号,就是文字字符串:(206)。

输入模板防止了用户向控件中输入非法字符。如果用户试图输入与输入模板冲突的字符,该控件将产生 ValidationError 事件。

MaskedEdit 控件是可绑定的控件,即可与数据控件共同使用以显示或更新在数据集内某个字段的值。

用途提示输入日期/时间、数字或货币信息。 提示输入自定义模板格式的数据,比如电话号码或其它有一定模板的数据。 格式化模板输入数据的显示和打印。 与数据控件共同完成对数据集中字段值的显示和更新。 Mask 属性

Mask 属性决定了输入到 MaskedEdit 控件中的信息的类型。Mask 属性用占位符定义了输入的类型,这些占位符有井字符 (#)、反斜线 (\)、逗号 (,) 和与号 (&)。下表中列出了所有可用于设置 Mask 属性的字符:

模板字符描述#数字占位符。.小数点占位符。最终使用的字符是在区域设置中的小数点占位符。该字符在模板中处理为文字。,千位分隔符。最终使用的字符是在区域设置中的千位分隔符。该字符在模板中处理为文字。:时间分隔符。最终使用的字符是在区域设置中的时间分隔符。该字符在模板中处理为文字。/日期分隔符。最终使用的字符是在区域设置中的日期分隔符。该字符在模板中处理为文字。\将模板字符串中的下一个字符作为文字处理。这使模板中可以具有 '#'、'&'、'A' 和 '?' 字符。该字符在模板中处理为文字。&字符占位符。该占位符对应的有效值是 32-126 和 128-255 之间的 ANSI 字符。>将随后的所有字符转换为大写。<将随后的所有字符转换为小写。A字母数字字符占位符(必须输入)。例如:a z、A Z 或 0 9。a字母数字字符占位符(可选输入)。9数字占位符(可选输入)。例如:0 9。C字符或空格占位符(可选输入)。?字母占位符。例如:a z 或 A Z。文字所有其它符号被作为文字显示,也就是说照原样显示。

要创建输入模板,需要组合使用模板字符和文字。文字是那些不代表数据类型或格式,而是照原样显示的字符。例如,要创建输入电话号码的输入模板,可将 Mask 属性定义如下:

MaskEdBox1.Mask = (###) - ### - ####

井字符(数字占位符)与左右括号和连字符(文字)组合使用。在运行时,该 MaskedEdit 控件显示如下:

输入电话号码的 MaskedEdit 控件

定义了输入模板后,在输入数据或移动插入点时,插入点将自动越过文字。

Text 和 ClipText 属性

控件中输入的所有数据都保存在 Text 属性中,并可从中获取数据。它是只能在运行时使用的属性,并且其中包括了输入模板中的所有文字和提示字符。比如,如果从上面示例的 Text 属性中获取数据,会返回字符串 "(555) - 555 - 5555",即输入的电话号码。

ClipText 也返回 MaskedEdit 控件中输入的数据,但其中不包括文字和提示字符。在上面的示例中,如果从 ClipText 属性中获取数据,会返回字符串 "5555555555"。ClipText 属性只能在运行时使用。

定义输入字符

按照缺省规定,所有掩码字符是有下划线的。这就告诉了用户该字符是要输入数据的占位符。用户输入有效字符后,下划线就消失了。如果希望保留下划线,可将 MaskedEdit 控件的 FontUnderline 属性设置为 True。

甚至可以通过使用 PromptChar 属性,把下划线输入字符改为其它字符。例如,把下划线 (_) 改为星号 (*),只需将 PromptChar 属性重新定义为:

MaskEdBox1.PromptChar = "*"将掩码字符用作文字

如果需要把掩码字符作为文字处理,可在模板字符之前加上反斜线 (\)。例如,如果希望显示井号 (#),可将模板字符串设置如下:

MaskEdBox1.Mask = "\##"

这样做将产生一个输入模板,在该输入模板中将显示一个井号 (#),在井号之后是用于输入数字的空格。

Format 属性

使用 Format 属性,可以修改 MaskedEdit 控件的显示和打印。Format 属性提供了显示数字、货币和日期/时间信息的标准格式。

下表中列出了可用于 Format 属性的标准格式:

数据类型描述数字(缺省)空字符串普通数字格式。按照输入格式显示。数字$#,##0.00;($#,##0.00)货币格式。使用千位分隔符,负数显示在括号中。数字0固定数字格式。至少显示一位数字。数字#,##0逗号格式。把逗号作为千位分隔符。数字0%百分数格式。将值乘上 100,并附加一个百分号。数字0.00E+00科学计数法格式。使用标准科学计数表示法。日期/时间(缺省)c普通日期和时间格式。显示日期、时间或两者同时显示。日期/时间dddddd长日期格式。与 Microsoft Windows “控制面板”的“区域设置”中的长日期设置相同。比如:Tuesday, May 26, 1992。日期/时间dd-mmm-yy中日期格式。比如:26-May-92。日期/时间ddddd短日期格式。与 Microsoft Windows “控制面板”的“区域设置”中的短日期设置相同。比如:5/26/92。日期/时间ttttt长时间格式。与 Microsoft Windows “控制面板”的“区域设置”中的长时间设置相同。比如:05:36:17 A.M。日期/时间hh:mm A.M./P.M.中时间格式。比如:05:36 A.M。日期/时间hh:mm短时间格式。比如:05:36。

可以同时使用 Format 属性和 Mask 属性。比如,要创建以短日期格式提示输入,而以长日期格式显示的模板,可以将 Mask 和 Format 属性设置如下:

MaskEdBox1.Mask = "##-##-##"MaskEdBox1.Format = "dddddd"

当用户以短格式输入日期(比如 06-27-96)后,MaskedEdit 控件验证输入的数据是否有效,然后当输入焦点转到下一控件中时,它将被显示为 "Thursday, June 27, 1996"。

注意 要在数据验证有效后自动将输入焦点转移到下一控件,可将 MaskedEdit 控件的 AutoTab 属性设置为 True。

使用 Format 属性,还可以用与 Visual Basic 的 Format 函数一样定义的格式表达式,指定自定义的格式。

详细信息 请参阅 “Format 函数”或“Format 属性(MaskedEdit 控件)”。

在设计时设置属性

在设计时,可用 MaskedEdit 控件的“属性页”设置属性的值。在 MaskedEdit 控件的“属性”窗口中单击“自定义”选项,以弹出“属性页”对话框,如下所示:

在设计时设置 Mask 属性

在该对话框中,可以象在上面的示例运行时那样,设置输入模板和格式模板。“格式”下拉列表可用来选取任何预定义的标准格式。通过该对话框还能够轻而易举地设置 PromptChar、ClipMode 和 MaxLength 等属性。

一个 MaskedEdit 字段中最多可有 64 个字符(有效范围是 1 至 64 个字符)。其中包括了文字以及模板字符。可用 MaxLength 属性设置该值。在设计时,该属性在键入输入模板时,会被自动设置为模板中的字符数。

ClipMode 属性确定在执行剪贴和复制命令时,是否包括文字。按照缺省规定,当 MaskedEdit 控件中选定的部分被复制到剪贴板中时,选中的整个内容,包括文字均被传输。要将复制操作的对象限制为用户输入的数据,可将 ClipMode 属性设置为 True。

ValidationError 事件

当 MaskedEdit 控件收到由输入模板确定的非法输入值时,将产生 ValidationError 事件。例如,如果定义了提示输入数字的输入模板,那么当用户试图键入字母时将产生 ValidationError 事件。除非自己编写了响应 ValidationError 事件的事件处理程序,MaskedEdit 控件将仅仅把当前插入点保留在原地,就如同什么也没有发生一样。

模板字符在输入时将被检验,并将插入点向右移动。输入或删除字符时(比如说,输入电话号码后再输入或删除一个数字),所有的非文字字符将向右或向左移动。在移动时,如果非法字符替代了原来合法字符的位置,将会触发 ValidationError 事件。

例如,假如 Mask 属性被定义为 "?###",而 Text 属性的当前值为“A12”。如果试图在字母“A”之前插入字母“B”,则“A”将向右移动。由于输入模板的第二个值需要的是数字,所以字母“A”将使该控件产生 ValidationError 事件。

MaskedEdit 控件在运行时,同样也要检验 Text 属性的值。如果 Text 属性的设置与输入模板冲突,该控件将产生运行时错误。

可用与标准文本框控件中相同的方法选取文本。如果删除选中的文本,则该控件将试图移动选中文本右侧余下的字符。然而,任何在移动过程中能够导致检验出错的剩余字符将被删除掉,并且不会产生 ValidationError 事件。

详细信息 请参阅 “ValidationError 事件”。

将 MaskedEdit 用作绑定的控件

MaskedEdit 控件是可绑定的控件。也就是说它可以与数据控件相关联,并显示数据集的当前记录中的字段值。MaskedEdit 控件还能够将值写入数据集。

注意 在读取由 DataField 属性引用的字段值时,只要有可能,它就被转换为 Text 属性字符串。如果该记录集是可被更新的,则该字符串在更新时将被转换为该字段的数据类型。

MaskedEdit 控件有三个被绑定的属性:DataChanged、DataField,以及 DataSource。

详细信息 关于使用被绑定属性的详细信息,请参阅《Visual Basic程序员指南》中“利用 Visual Basic's 标准控件”里的“利用 ADO Data 控件”。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-23 16:10 , Processed in 0.038530 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表