|
楼主 |
发表于 2009-3-13 08:16
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
第6部分 使用对话框
技巧75 使用InputBox函数
75-1 简单的数据输入
Excel的使用过程中,有时需要用户输入简单的数据,此时可以使用InputBox函数显示一个对话框,供用户在对话框中输入数据信息,如下面的代码所示。- #001 Sub myInputBox()
- #002 Dim sInt As String
- #003 Dim r As Integer
- #004 r = Sheet1.Range("A65536").End(xlUp).Row
- #005 sInt = InputBox("请输入人员姓名:")
- #006 If Len(Trim(sInt)) > 0 Then
- #007 Sheet1.Cells(r + 1, 1) = sInt
- #008 Else
- #009 MsgBox "您没有输入内容!"
- #010 End If
- #011 End Sub
复制代码 代码解析:
myInputBox过程使用InputBox函数显示一个对话框供用户在对话框中输入数据,InputBox函数显示一个对话框,等待用户输入正文或按下按钮,并返回包含文本框内容的字符串,语法如下:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
参数prompt是必需的,作为对话框消息出现的字符串表达式。
参数title是可选的,作为显示在对话框标题栏中的字符串表达式,如果省略title参数,则在标题栏中显示“Microsoft Excel”。
参数default是可选的,显示在文本框中的字符串表达式,在没有其它输入时作为缺省值,如果省略default参数,则文本框为空。
参数xpos是可选的,指定对话框的左边与屏幕左边的水平距离。如果省略xpos参数,则对话框会在水平方向居中。
参数ypos是可选的,指定对话框的上边与屏幕上边的距离。如果省略ypos参数,则对话框被放置在屏幕垂直方向距下边大约三分之一的位置。
参数helpfile和参数context是可选的,为对话框提供上下文相关的帮助和编号,如果提供了其中一个参数,则必须提供另一个参数,两者缺一不可。
第5行代码,使用InputBox函数显示一个提示用户输入邮政编码的对话框,其中“请输入人员姓名:”是必需的prompt参数,其他参数使用缺省值。
第4行代码,使用Len函数和Trim函数判断返回的去除空格后的字符串长度。如果字符串长度大于零,说明用户单击了对话框的“确定”按钮,则将用户输入的数据写到工作表的A列单元格。如果返回的是长度为零的字符串,说明用户单击了对话框的“取消”按钮,则显示一条提示消息。
因为当用户单击对话框的“确定”按钮后,InputBox函数返回包含文本框内容的字符串,如果用户单击对话框的“取消”按钮则返回一个长度为零的字符串(""),通过返回的字符串长度可以判断用户做出的选择。
运行sInput过程将显示一个提示用户输入数据的对话框,如图所示。
75-2 使用对话框输入密码
使用InputBox函数显示的对话框输入密码简单方便,但有个明显的缺陷,就是输入过程中不能用占位符显示密码,不够安全。借助API函数可以在输入密码过程中以占位符“*”号来显示密码,如下面的代码所示。- #001 Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
- #002 Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
- #003 Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
- #004 Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
- #005 Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
- #006 Public Declare Function GetTickCount Lib "kernel32" () As Long
- #007 Public Const EM_SETPASSWORDCHAR = &HCC
- #008 Public lTimeID As Long
- #009 Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
- #010 Dim hwd As Long
- #011 hwd = FindWindow("#32770", "密码")
- #012 If hwd <> 0 Then
- #013 hwd = FindWindowEx(hwd, 0, "edit", vbNullString)
- #014 SendMessage hwd, EM_SETPASSWORDCHAR, 42, 0
- #015 timeKillEvent lTimeID
- #016 End If
- #017 End Sub
- #018 Sub Password()
- #019 Dim Password As Variant
- #020 lTimeID = timeSetEvent(10, 0, AddressOf TimeProc, 1, 1)
- #021 Password = InputBox("请输入密码:", "密码")
- #022 If Password = "123456" Then
- #023 MsgBox "密码正确!"
- #024 Else
- #025 MsgBox "密码错误!"
- #026 End If
- #027 End Sub
复制代码 代码解析:
Password过程使用InputBox函数显示一个输入密码的对话框,并且以占位符“*”号显示输入的密码。
第1行到第8行代码,API函数声明。
第9行到第17行代码,TimeProc过程是timeSetEvent的回调函数,获得对话框句柄。
第18行到第27行代码,Password过程显示一个提示用户输入密码的对话框。
运行Password过程将显示一个密码输入框,输入的密码以占位符“*”号代替,如图所示。
|
评分
-
1
查看全部评分
-
|