Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 13566|回复: 16

[分享] 运用窗体作为输入界面示例

  [复制链接]
发表于 2011-6-3 09:24 | 显示全部楼层 |阅读模式
本帖最后由 amulee 于 2011-6-3 09:25 编辑

输入.png

常用VBA的朋友对这个界面应该不会陌生吧,这是一个最常用的窗体输入界面。点击确定按钮后,程序将控件中的值输入到表格中。在此,我要介绍这个向单元格赋值过程的三种不同处理方式:
1、通常我们采用的方法,即依次将各控件的值赋值到单元格中。代码如下:
  1. Private Sub UserForm_Initialize()
  2.     With Me.ComboBox1
  3.         .Style = fmStyleDropDownList
  4.         .AddItem "男"
  5.         .AddItem "女"
  6.         .ListIndex = 0
  7.     End With
  8. End Sub
  9. Private Sub CommandButton3_Click()
  10.     '将各控件值依次输入单元格中
  11.     With Sheet3.Range("A" & Sheet3.Cells.Rows.Count).End(xlUp).Offset(1, 0)
  12.         .Offset(0, 0) = Me.TextBox1
  13.         .Offset(0, 1) = Me.ComboBox1
  14.         .Offset(0, 2) = Me.TextBox3
  15.     End With
  16. End Sub
复制代码
这个输入方法很直观,输入到单元格中的数据均为文本。

2、运用Excel的强制类型转换,将三个控件编为一个数组,可以在单元格内直接写入该数组。代码如下:
  1. '定义一个变量,在窗体存在期间始终有效
  2. Dim ArrTxt()
  3. '窗体初始化时候,绑定TextBox控件到数组
  4. Private Sub UserForm_Initialize()
  5.     ReDim ArrTxt(1 To 3)
  6.     Set ArrTxt(1) = Me.TextBox1
  7.     Set ArrTxt(2) = Me.ComboBox1
  8.     Set ArrTxt(3) = Me.TextBox3
  9.     With Me.ComboBox1
  10.         .Style = fmStyleDropDownList
  11.         .AddItem "男"
  12.         .AddItem "女"
  13.         .ListIndex = 0
  14.     End With
  15. End Sub
  16. Private Sub CommandButton2_Click()
  17.     'Excel的智能类型转换,将各控件的默认属性作为数组的返回值。
  18.     Sheet3.Range("A" & Sheet3.Cells.Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 3) = ArrTxt
  19. End Sub
复制代码
可以看见,虽然ArrTxt为对象数组,但是这个数组可以直接赋值到单元格中。这个就是Excel的强制类型转换,在很多地方都会看见这个强制的类型转换。这给对象批量赋值提供了很大的方便。但是这个方法输入到单元格中的任然为文本,即便是数字,也只会会转换成文本数字。

3、利用Transpose进行类型转换。
Transpose的功效之一,智能的类型转换,可以根据实际情况进行对象属性的转换,文本数字不再保留其文本格式,而是转换为数字。
  1. '定义一个变量,在窗体存在期间始终有效
  2. Dim ArrTxt()
  3. '窗体初始化时候,绑定TextBox控件到数组
  4. Private Sub UserForm_Initialize()
  5.     ReDim ArrTxt(1 To 3)
  6.     Set ArrTxt(1) = Me.TextBox1
  7.     Set ArrTxt(2) = Me.ComboBox1
  8.     Set ArrTxt(3) = Me.TextBox3
  9.     With Me.ComboBox1
  10.         .Style = fmStyleDropDownList
  11.         .AddItem "男"
  12.         .AddItem "女"
  13.         .ListIndex = 0
  14.     End With
  15. End Sub
  16. '确定输入代码
  17. Private Sub CommandButton1_Click()
  18.     'Transpose除了对类型进行强制转换外,更可将文本数字转换为数字。更为智能。
  19.     Dim arr
  20.     arr = WorksheetFunction.Transpose(WorksheetFunction.Transpose(ArrTxt))
  21.     Sheet3.Range("A" & Sheet3.Cells.Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 3) = arr
  22. End Sub
复制代码
来看看这三种方法的效果吧。
窗体输入界面示例.gif

窗体输入界面.rar (11.66 KB, 下载次数: 371)

评分

参与人数 6 +30 学分 +2 收起 理由
ZAX8788 + 2
jds + 3 很给力
HANSI-66 + 1 很给力!
mxg825 + 3 加精
xchw1818 + 3

查看全部评分

发表于 2011-6-3 09:47 | 显示全部楼层
厉害呀,学习一下~~~~~~~~   这个相当于记录单的作用,但个性化多了  先留名,后学习
回复

使用道具 举报

发表于 2011-6-3 10:20 | 显示全部楼层
本帖最后由 mxg825 于 2011-6-3 10:57 编辑

精典 。。。。。又学习了

提问一下:用第二个办法
把数据写入ACCESS 数据库(年龄字段是数值)

是否会出错?
回复

使用道具 举报

发表于 2011-6-3 11:05 | 显示全部楼层
测试了一下!第二个办法
写入ACCESS 数据库正常 通过!
回复

使用道具 举报

发表于 2011-6-3 11:26 | 显示全部楼层
如果阿木老师,能够把注释写的更详细一点就好了,比方说  ME的用法,控件的用法,让无基础的也可以很明白的看的清楚~~~~~谢谢了
回复

使用道具 举报

发表于 2011-6-3 13:13 | 显示全部楼层
非常感谢阿木老师和各位朋友.努力学习.
回复

使用道具 举报

 楼主| 发表于 2011-6-3 13:21 | 显示全部楼层
mxg825 发表于 2011-6-3 11:05
测试了一下!第二个办法
写入ACCESS 数据库正常 通过!

可见Office自动类型转换的通用性
回复

使用道具 举报

发表于 2011-6-3 13:33 | 显示全部楼层
感谢分享!!下载下来学习一下!!
回复

使用道具 举报

发表于 2011-6-3 19:46 | 显示全部楼层
老师,学习了
回复

使用道具 举报

发表于 2011-6-3 20:27 | 显示全部楼层
非常感谢阿木老师
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 08:17 , Processed in 0.560943 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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