1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 与你分享关于RefEdit控件在编程中控制使用

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-8-20 19:27 | 显示全部楼层 |阅读模式
最近,我在学习RefEdit控件在编程中控制使用,现就我的学习体会与你分享。
题目:根据地址区域在另外一个地址区域区分显示“街、路、村”。
(注意,达到目的不重要,重要的是达到目的前,由于使用的是程序在运行后读入的单元格地址,这个时候要是范围不正确,后续的编程控制是很难的,在我的想象中,应该是可以通过某些控件的属性、事件、方法可以达到的,但是,我在本群上通过多种形式提问,都没有人给予我满意答案,这样,我自己萌生了自己编写语句控制试试,就有了以下这篇文章。)
分析并给出问题解决的办法:
       1、从外行人的要求看,读入的数据源是一列的;目标数据是三列的;并且,目标数据与数据源是一样高和相同的行数的,最好是目标数据范围上是没有数据的(这点没有编写程序。);
       2、从编写程序角度看,要是一个条件达不到,就没有提示地停在那里,那肯定是一个失败的程序,那改编写有提示的,要是提示都有要回答“是”、“否”的提示窗口,那肯定也不是一个优秀的程序,本人搞不出最好的,给了一个折中:过一定时间会自动关闭的提示窗;
       3、在程序测试中,程序老是崩溃,发现是RefEdit控件还没赋值引起,索性就用出错语句来完成程序的崩溃,并给一个自动关闭的提示窗;
       4、为了使程序充分利用提示窗,特意编写了一个自动关闭的提示窗(注:不是我自己写的,是VBA常用技巧上抄来的。),在这里,用了一点调用子程序参数传递的小技巧,那就是设置全局变量ts
       5、为了使后续程序编写更加方便,CommandButton1的caption设置为:“检查”,当检查通过后,CommandButton1的caption设置为:“运行”;这个就是相当于有人经常提出一个按钮,做两件事情的小技巧。
清单:
一个窗体:UserForm1;
两个标签:一个标签Label1的caption设置为“数据源”,一个标签Label2的caption设置为“目标数据”;
两个读入单元格控件:RefEdit1和RefEdit2,分别对应上面的两个标签;
两个按钮:一个按钮CommandButton1的captiond 起始值:“检查”,和CommandButton2的caption设置为“退出”。
程序清单:
主程序:

Sub main()
UserForm1.Show
End Sub

窗体下的各个控件的程序清单

'定义了一个在窗体下的公用字符串变量
Dim ts As String

按钮CommandButton1程序清单

Private Sub CommandButton1_Click()
On Error GoTo line
Dim rngSource As Range
Dim rngTarget As Range
Set rngSource = Range(RefEdit1)
Set rngTarget = Range(RefEdit2)
If CommandButton1.Caption = "检查" Then
If rngSource.Columns.Count > 1 Then
ts = "数据源的列数应为一列"
Call WshShell
RefEdit1.Value = ""
RefEdit1.SetFocus
Exit Sub
End If
If rngTarget.Columns.Count <> 3 Then
ts = "目标数据的列数应为三列"
Call WshShell
RefEdit2.Value = ""
RefEdit2.SetFocus
Exit Sub
End If
If rngSource.Cells(1).Row <> rngTarget.Cells(1).Row Then
ts = "目标数据的起始行与数据源的起始行不在同一水平线"
Call WshShell
RefEdit2.Value = ""
RefEdit2.SetFocus
Exit Sub
End If
If rngSource.Rows.Count <> rngTarget.Rows.Count Then
ts = "目标数据的行数与数据源的行数不等"
Call WshShell
RefEdit2.SetFocus
Exit Sub
End If
CommandButton1.Caption = "运行"
CommandButton1.ForeColor = 255
Else
'以下就是运行所以要编写的程序,由于不是本文的重点,所以故意用一句提示表示。
CommandButton1.SetFocus
ts = "你RefEdit1的读入的单元格是" & Range(RefEdit1).Columns.Count & "列。" & Chr(13) & "你RefEdit2的读入的单元格是" & Range(RefEdit2).Columns.Count & "列。"
Call WshShell
CommandButton1.Caption = "检查"
CommandButton1.ForeColor = &H80000012
End If
Exit Sub
line:
ts = "你选择的单元格区域不正确!"
Call WshShell
End Sub

被用来调用的子程序

Sub WshShell()
Dim WshShell As Object
Set WshShell = CreateObject("Wscript.Shell")
WshShell.popup ts, 2, "提示", 64
Set WshShell = Nothing
End Sub

按钮CommandButton2程序清单

Private Sub CommandButton2_Click()
End
End Sub



测试RefEdit.zip

17.16 KB, 下载次数: 832

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-6-26 14:19 | 显示全部楼层
为啥没人回复啊,这么好的东西

TA的精华主题

TA的得分主题

发表于 2013-7-7 14:44 | 显示全部楼层
还是不太明白如何把选择的范围内容赋值给数组,待解……

TA的精华主题

TA的得分主题

发表于 2013-8-9 09:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-9-3 14:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
下载学习,谢谢分享。

TA的精华主题

TA的得分主题

发表于 2015-9-5 16:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了,谢谢

TA的精华主题

TA的得分主题

发表于 2015-10-31 20:18 | 显示全部楼层
正在学习VBA窗体控件,刚好学习到这个控件,了解一下,谢谢分享。

TA的精华主题

TA的得分主题

发表于 2015-12-4 09:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
下载学习,谢谢分享。

TA的精华主题

TA的得分主题

发表于 2016-3-19 09:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
xiapukongtiao 发表于 2013-6-26 14:19
为啥没人回复啊,这么好的东西

代码的排版方面可读性很差,没有任何的层次感而言。
如果不是非常想研究这个控件,
很多人会望着这堆没有层次感的代码望而却步。

不过,感谢楼主。

TA的精华主题

TA的得分主题

发表于 2019-8-28 18:19 | 显示全部楼层
Refeidt弹出选择数据对话框后,只能通过鼠标拖拽的方式选择数据,而无法使用range(cell).end(xldown)的方式选择数据,对于大数据是硬伤。若采用showmodal=false的方式,RefEdit又会出错。。。。还在研究过程中,希望窗体中能有更友好的选择数据方式
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

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

GMT+8, 2025-3-5 19:18 , Processed in 0.028575 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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