ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么用VBA窗体给其他的窗体作快速录入啊?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-2-13 17:30 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 古月舟亢 于 2019-2-14 21:27 编辑

我通过VBA设置建立了  领取  补充  归还三个窗体,里面都需要输入药品名称和领取的部门,想通过弹出一个新的窗体来实现简单快速的录入

目前已经再EXCEL里面录入了药品名称和领取部门

并建立了  选择药品,选择部门 两个新窗体

那领取中输入部门来举例

我将领取窗体(userform1)中  显示部门的label设置了单击事件,部门的输入框是textbox1,代码是

  1. UserForm_changebm.Label1.Caption = UserForm1.Name
  2. UserForm_changebm.Label2.Caption = TextBox1.Name

  3. UserForm_changebm.Show
复制代码


在选择部门窗体(userform_changebm)中,添加了两个label,一个combobox,一个CommandButton,其中combobox通过代码将excel中录入的部门名称赋值好

  1. r = Worksheets(2).[a65530].End(xlUp).Row
  2. list = "数据库!a2:a" & r
  3. ComboBox1.RowSource = list
复制代码

然后再设置单击按钮事件

  1. Dim a, b
  2. a = Label1.Caption
  3. b = Label2.Caption
  4. Set c = UserForms(a)
  5. Set d = c.TextBoxs(b)
  6. d.Text = ComboBox1.T
复制代码

目前就做到这一步

提示的是类型匹配,我已经试着弄了好多次了,完全没有头绪,求大神门帮帮忙!!!!



药品管理登记表.zip

20.85 KB, 下载次数: 205

头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2019-2-14 09:22 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-14 21:28 | 显示全部楼层
朱荣兴 发表于 2019-2-14 09:22
没有附件支持的求助,说再多也没用的

附件添加上来了   麻烦请教一下!!!亲(YoY)

TA的精华主题

TA的得分主题

发表于 2019-2-15 08:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果是实际应用,则建议:
       将UserForm2 的药品名称、部门两个文本框直接换成 复合框,UserForm3同样。

如果是学习数据在窗体间传递则另当别论


TA的精华主题

TA的得分主题

发表于 2019-2-15 08:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
比如  将 UserForm_changename 的数据传递到 UserForm2 的 TextBox1 :


  1. Private Sub CommandButton1_Click()
  2.     UserForm2.TextBox1.Text = ComboBox1.Text
  3.     Unload Me
  4. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-15 09:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 古月舟亢 于 2019-2-15 09:49 编辑
一指禅62 发表于 2019-2-15 08:47
比如  将 UserForm_changename 的数据传递到 UserForm2 的 TextBox1 :

是再学习窗体之间的数据传递

大大 你这个法子只能一个窗体指定对应一处的控件的数据传递

我是想用有没有法子将控件的位置先传递到 赋值用的窗体上,然后再根据这个位置判断来动态反向的传递数据

最开始我还是想再选择用的窗体上动态生成按钮控件,并添加代码来执行动态反向数据传递来着,但是添加的代码没有效果(运行后单击按钮没有相应),而且我也不会关闭窗体的时候自动删除这些代码,所以后面改用的下拉菜单控件





TA的精华主题

TA的得分主题

发表于 2019-2-15 09:48 | 显示全部楼层
古月舟亢 发表于 2019-2-15 09:21
是再学习窗体之间的数据传递

大大 你这个法子只能一个窗体指定对应一处的控件的数据传递


模拟一个,供参考:

窗体间数据传递.zip (13.27 KB, 下载次数: 333)


当然,实现这类需求的最好办法是类化。


TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-15 09:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一指禅62 发表于 2019-2-15 09:48
模拟一个,供参考:

大大  下载下来没法执行~~而且没看懂  <窗体.控件.属性=>为什么窗体(userform)的位置用的是ME代替,用ME不是会默认为当前打开的窗体么

TA的精华主题

TA的得分主题

发表于 2019-2-15 10:11 | 显示全部楼层
类模块代码

  1. Option Explicit
  2. Private WithEvents iTextBox As MSForms.TextBox
  3. Private WithEvents iUfm As MSForms.UserForm

  4. Public Sub Attach(f As MSForms.UserForm, c As MSForms.TextBox)
  5.     Set iUfm = f
  6.     Set iTextBox = c
  7. End Sub


  8. Private Sub iTextBox_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  9.     Cancel = True
  10.     Set Ufm = iUfm
  11.     txt = iTextBox.Name
  12.     UserIN.Show
  13. End Sub
复制代码


模块代码
  1. Option Explicit
  2. Public Ufm As UserForm
  3. Public txt As String
  4. Dim cls() As New 类1


  5. Sub 控件初始化(f As UserForm)
  6.     Dim ctl As Control, n%
  7.     For Each ctl In f.Controls
  8.         If TypeName(ctl) = "TextBox" Then
  9.             n = n + 1: ReDim Preserve cls(1 To n)
  10.             cls(n).Attach f, ctl
  11.         End If
  12.     Next
  13. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-2-15 10:12 | 显示全部楼层
本帖最后由 一指禅62 于 2019-2-15 10:16 编辑

窗体间数据传递_类化.zip (16.11 KB, 下载次数: 420)


窗体中的文本框任意添加,不用增加或修改代码。

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

本版积分规则

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

GMT+8, 2024-11-19 04:42 , Processed in 0.048909 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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