Microsoft技术社区联盟成员,全球领先的Excel2003/2007/2010门户,Office培训学习的最佳社区
设为首页收藏本站|繁體中文 切换到窄版

Excel Home论坛

 找回密码
 免费注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

魔方网表,Excel终结者,永久免费 Excel服务器2010软件和教程下载 菜鸟啃Excel: 样章试读
Excel不给力? 何不试试FoxTable! 2012年Excel免费培训班2-6月开课计划 新人必读:ExcelHome最佳学习方法 免费下载Excel行业应用视频教程
精粹:成为Excel高手的捷径 免费下载39集新Excel精粹视频教程 免费学习Excel数据透视表视频教程 入门必看《循序渐进学Excel》视频
Excel辅助工具的巅峰之作--Kutools 免费学习Excel 2007精粹视频教程 Office Tab,Office界面的革命性创新 搞不定老板要的报表?我们来帮您

INPUTBOX 延迟输入

查看: 3221|回复: 18| 收藏 :0
  • 29419财富
  • 63鲜花
  • 63技术
  • 积分排行
    15
    帖子
    12283
    精华
    1
    分享
    0

    INPUTBOX 延迟输入 [复制链接]

    大家知道,下面的代码(代码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


  • 26404财富
  • 0鲜花
  • 11技术
  • 积分排行
    25
    帖子
    13345
    精华
    3
    分享
    0
    发表于 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

    祝愿:哥哥弟弟更加潇洒,姐姐妹妹天天年轻!
  • 29419财富
  • 63鲜花
  • 63技术
  • 积分排行
    15
    帖子
    12283
    精华
    1
    分享
    0
    发表于 2006-8-29 20:00:43 |显示全部楼层
    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。

  • 26404财富
  • 0鲜花
  • 11技术
  • 积分排行
    25
    帖子
    13345
    精华
    3
    分享
    0
    发表于 2006-8-29 20:04:31 |显示全部楼层
    呵呵,这几个API函数弄得晕人。好像在VBA中,取得句柄是比较难以实现的啊。
    祝愿:哥哥弟弟更加潇洒,姐姐妹妹天天年轻!
  • 3337财富
  • 0鲜花
  • 12技术
  • 积分排行
    358
    帖子
    1558
    精华
    1
    分享
    0
    发表于 2006-8-30 01:06:22 |显示全部楼层

    現在的問題是,如何使得代碼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编辑过]

    Have no passion for Excel especially at   "Home"
  • 4500财富
  • 0鲜花
  • 24技术
  • 积分排行
    223
    帖子
    1078
    精华
    10
    分享
    0
    发表于 2006-8-30 09:19:46 |显示全部楼层
    总结一下方法: 请参考:INPUTBOX 延迟输入的方法研究.http://club.excelhome.net/viewthread.php?tid=185695
    Stanley Pan
  • 29419财富
  • 63鲜花
  • 63技术
  • 积分排行
    15
    帖子
    12283
    精华
    1
    分享
    0
    发表于 2006-8-30 09:21:35 |显示全部楼层

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

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

  • 3337财富
  • 0鲜花
  • 12技术
  • 积分排行
    358
    帖子
    1558
    精华
    1
    分享
    0
    发表于 2006-8-30 11:37:08 |显示全部楼层
    QUOTE:
    以下是引用stanleypan在2006-8-30 9:19:46的发言:
    总结一下方法: 请参考:INPUTBOX 延迟输入的方法研究.http://club.excelhome.net/viewthread.php?tid=185695

    優秀的研究作品 !!!

    [em17]
    Have no passion for Excel especially at   "Home"
  • 54财富
  • 0鲜花
  • 0技术
    • 等级 2EH初级
    积分排行
    3000+
    帖子
    13
    精华
    0
    分享
    0
    发表于 2006-8-31 10:01:52 |显示全部楼层

    请问贵宾和版主

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

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

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

  • 2931财富
  • 0鲜花
  • 2技术
    • 等级 4EH高级
    积分排行
    530
    帖子
    1283
    精华
    1
    分享
    0
    发表于 2006-8-31 10:15:18 |显示全部楼层

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

    InputA ="高" & InputA

    ERP及生产管理软件开发。QQ:182623821(龙岗VBA程序員)

    发表回复

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

    发帖时请遵守我国法律,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任。
    回顶部