ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

INPUTBOX 延迟输入

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-8-29 18:39 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

大家知道,下面的代码(代码1)可以实现INPUTBOX的默认输入:

Sub macro1()
Dim s As String
s = InputBox("please enter a number", "information",123)
End Sub

另一段代码(代码2)则完全等待输入:

Sub macro1()
Dim s As String
s = InputBox("please enter a number", "information")
End Sub

现在的问题是,如何使得代码2 经过5秒钟的延迟,再默认输入“123”?

估计需要用到HOOK技术,多次实验均未成功,请大家帮忙(不许使用USERFORM模拟实现),多谢!!!

附:可能用到的API函数

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private 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
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long


TA的精华主题

TA的得分主题

发表于 2006-8-29 19:48 | 显示全部楼层

不会是这样吧?

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private 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
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Sub macro1()
    Dim s As String
    Sleep 5000
    t = 123
    s = InputBox("please enter a number", "information", t)
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-29 20:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用plxmm在2006-8-29 19:48:39的发言:

不会是这样吧?

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private 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
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Sub macro1()
    Dim s As String
    Sleep 5000
    t = 123
    s = InputBox("please enter a number", "information", t)
End Sub

不是这样的。

我的要求是弹出INPUTBOX窗口(此时是空文本框)后,停顿5秒钟,自动键入123。

TA的精华主题

TA的得分主题

发表于 2006-8-29 20:04 | 显示全部楼层
呵呵,这几个API函数弄得晕人。好像在VBA中,取得句柄是比较难以实现的啊。

TA的精华主题

TA的得分主题

发表于 2006-8-30 01:06 | 显示全部楼层

現在的問題是,如何使得代碼2 經過5秒鍾的延遲,再默認輸入“123”?

類似嗎?

'---------------------------------------------------------------------------------------
' Module    : Module1
' DateTime  : 30/8/2006 01:03
' Author    :  
' Purpose   :
'---------------------------------------------------------------------------------------
' Base on chijanzen's code

Public Declare Function SetTimer Lib "user32" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElaspe As Long, _
    ByVal lpTimerFunc As Long) As Long

Public Declare Function KillTimer Lib "user32" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long) As Long
   
Dim TID As Long
Const Sec = 5    ' seconds


Sub Test()
    TID = SetTimer(0, 0, Sec * 1000, AddressOf CloseTest)
    s = InputBox("Please Enter a nubmer" & Chr(13) & Sec & "  Seconds Auto Close", "Information", 123)
    KillTimer 0, TID
    MsgBox s
End Sub


Sub CloseTest(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idevent As Long, _
    ByVal Systime As Long)
        Application.SendKeys "~", True
        KillTimer 0, TID
End Sub

[此贴子已经被作者于2006-8-30 1:18:08编辑过]

TA的精华主题

TA的得分主题

发表于 2006-8-30 09:19 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-30 09:21 | 显示全部楼层

非常感谢二位高人,代码运行成功

[此贴子已经被作者于2006-8-30 9:28:15编辑过]

TA的精华主题

TA的得分主题

发表于 2006-8-30 11:37 | 显示全部楼层
QUOTE:
以下是引用stanleypan在2006-8-30 9:19:46的发言:
总结一下方法: 请参考:INPUTBOX 延迟输入的方法研究.http://club.excelhome.net/viewthread.php?tid=185695

優秀的研究作品 !!!

[em17]

TA的精华主题

TA的得分主题

发表于 2006-8-31 10:01 | 显示全部楼层

请问贵宾和版主

如何让InputBox中默认选项不处于选择状态

 Dim InputA As String
    InputA = InputBox("" & Chr(13) _
     & "   请输入【年级】" & Chr(13) & "    高一、高二、高三" & Chr(13) _
      & "提示:", Default:="高")

我想让"高"在运行时不处于选择状态,即我不需按方向右键,直接输入或一或二或三,先表示感谢了.

TA的精华主题

TA的得分主题

发表于 2006-8-31 10:15 | 显示全部楼层

Dim InputA As String
    InputA = InputBox("" & Chr(13) _
     & "   请输入【年级】" & Chr(13) & "    高一、高二、高三" & Chr(13) _
      & "提示:", Default:="")

InputA ="高" & InputA

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

本版积分规则

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

GMT+8, 2024-3-29 15:07 , Processed in 0.047815 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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