|
最近,我在学习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
|
评分
-
1
查看全部评分
-
|