Excel精英培训网

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

[已解决]窗体中动态功能

[复制链接]
发表于 2021-11-16 00:20 | 显示全部楼层 |阅读模式
如本文件,需要做到新增的文本框里面的写的条目从a1单元格向下写入
最佳答案
2021-11-16 21:49
简单示例:
  1. Public b As Boolean

  2. Sub test()
  3. b = Not b  '建一个表单按钮,右键指定此宏,如果你要从按钮文字上判断当前是打开还是关闭事件状态,可以在这里设置caption修改语句。
  4. End Sub

  5. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  6. If b = False Then Exit Sub
  7. If Target.Column <> 1 Then Exit Sub
  8. Call 你的过程
  9. End Sub
复制代码

创建控件.rar

22.2 KB, 下载次数: 8

发表于 2021-11-16 11:12 | 显示全部楼层
动态控件这东西复杂的很,复杂点不在于如何添加控件和设置属性,而是后续如何给动态控件添加事件和方法代码。给你一个excelhome论坛版主的一个例子,他使用了全动态的方法,包括窗体也是动态创建的。他的例子不需要类,完全是在模块中动态添加控件,https://club.excelhome.net/thread-52406-1-1.html,具体范本文件在29楼;

由于对AxtivaX控件添加代码非常困难,我个人建议直接使用表单控件,因为表单控件可以直接用.OnAction来关联静态代码,从而避免了使用ActiveX控件需要使用ActiveWorkbook.VBProject.VBComponents来深层控制控件的麻烦。我认为动态代码也有个很大的弊端,需要反复添加和删除,否则就会出现定义重复的问题;
回复

使用道具 举报

 楼主| 发表于 2021-11-16 12:59 | 显示全部楼层
hfwufanhf2006 发表于 2021-11-16 11:12
动态控件这东西复杂的很,复杂点不在于如何添加控件和设置属性,而是后续如何给动态控件添加事件和方法代码 ...

但是窗体里面的是都可以使用类模块应该是可以完成的,有问题才会有解决方案。我知道这个很麻烦,以我现在的能力我确实是做不到。动态添加控件,实际应用中太多的,有一些时候对实际将要使用的情况并不明确,所以要采用动态的方案
回复

使用道具 举报

发表于 2021-11-16 13:40 | 显示全部楼层
天门白云 发表于 2021-11-16 12:59
但是窗体里面的是都可以使用类模块应该是可以完成的,有问题才会有解决方案。我知道这个很麻烦,以我现在 ...

可以转换思路,把动态添加控件改成动态变换参数。你能看到的动态控件的场景少之又少,但动态参数的场景非常普遍,这是实际中更容易现实的方法;
至于类,那东西都是用来构建自定义控件的中间件,并非面向用户的终端控件,用途也十分有限。研究这些需要有非常深厚的底层功底和大量实践,并非靠看几个例子就能学会的;
回复

使用道具 举报

 楼主| 发表于 2021-11-16 13:57 | 显示全部楼层
hfwufanhf2006 发表于 2021-11-16 13:40
可以转换思路,把动态添加控件改成动态变换参数。你能看到的动态控件的场景少之又少,但动态参数的场景非 ...

vba要做得好也确实很难
回复

使用道具 举报

发表于 2021-11-16 19:58 | 显示全部楼层
不知道你要的是不是这个意思:
1、动态添加文本框,这个你的代码本来就能实现,就没去动它,只修改了一点点;
2、点击写入按钮后,会在最新创建的文本框内写入内容。
附件请测试。

创建控件.rar

19.23 KB, 下载次数: 11

回复

使用道具 举报

 楼主| 发表于 2021-11-16 21:08 | 显示全部楼层
创建出来的控件访问就是userform1("名称")的吗
回复

使用道具 举报

发表于 2021-11-16 21:12 | 显示全部楼层
天门白云 发表于 2021-11-16 21:08
创建出来的控件访问就是userform1("名称")的吗

可以这样写,正规写法是userform1.controls("名称")
回复

使用道具 举报

发表于 2021-11-16 21:14 | 显示全部楼层
本帖最后由 大灰狼1976 于 2021-11-16 21:17 编辑

写入功能我理解错了,你的需求应该是手工填写文本框后,顺序把文本框内容输入到单元格区域,这个我再改一下。只要改以下类模块中的过程:
Private Sub bt_Click()
Dim i&
For i = 1 To n
  ActiveSheet.Cells(i, 1) = UserForm1("Txb" & i).Text
Next i
End Sub

回复

使用道具 举报

 楼主| 发表于 2021-11-16 21:21 | 显示全部楼层
大灰狼1976 发表于 2021-11-16 21:14
写入功能我理解错了,你的需求应该是手工填写文本框后,顺序把文本框内容输入到单元格区域,这个我再改一下 ...

使用正规的写法不能访问创建出来的控件,你后来写出来的是我的本意。为什么创建出来的控件的访问方式跟画出来的控件的访问方式不同,这么多的属性还有访问方式的不同,在哪里可以查阅到

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 22:18 , Processed in 0.359371 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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