存档

2010年6月 的存档

定时关闭MsgBox-未公开的API

2010年6月24日

大家都知道,VBA中自带的MsgBox不能自动关闭,某些特殊情况下需要在指定时间内用户没有点击消息框按钮后能继续运行代码,需要用到定时关闭的消息框,之前的方法是使用Wscript.Shell的Popup方法,或者自定义窗体。
EH的ldy兄推荐了一个未公开的API可以实现定时关闭消息框,感觉十分有用。稍作修改,将wType参数改成可以提示输入VBA的vbMsgboxStyle常数。
这个API函数的参数如下:

  • hwnd:窗口句柄,可以设为0
  • lpText:消息框显示内容,类似于MsgBox函数的第一个参数Prompt
  • lpCaption:消息框标题,类似于MsgBox函数的第三个参数Caption
  • wType:消息框类型,类似于MsgBox函数的第二个参数Buttons
  • wlange:不是太明白这个参数,0或者1都看不出什么差别
  • dwTimeout:延时时间,单位是毫秒

返回的值和vbMsgBoxResult常数一样,多了一个返回值32000表示超过延时时间未选择任何按钮。

Private Declare Function MsgBoxEx Lib "user32" Alias "MessageBoxTimeoutA" ( _
    ByVal hwnd As Long, _
    ByVal lpText As String, _
    ByVal lpCaption As String, _
    ByVal wType As VbMsgBoxStyle, _
    ByVal wlange As Long, _
    ByVal dwTimeout As Long) As Long
Private Sub TestMsgboxEx()
    Dim ret As Long
    ret = MsgBoxEx(0, "请选择", "两秒后自动关闭", vbYesNo + vbInformation, 1, 2000)
    If ret = 32000 Then
        Debug.Print "超时关闭"
    ElseIf ret = vbYes Then
        Debug.Print "选择Yes"
    ElseIf ret = vbNo Then
        Debug.Print "选择No"
    End If
End Sub

VBA ,

MS Office Web Apps发布

2010年6月11日

昨天进入到自己的SkyDrive公开文件夹的时候发现改成了新的界面,并且使用的是Office.live.com域名,原来是MS Office Web Apps正式发布了。
这里说只在美国、英国、加拿大和爱尔兰四个地区首先发布,但是我这里进去之后实际上是可以直接使用的,不知道是不是Hotmail修改了地区的原因。
新的界面根据时间分类,比起之前的SkyDrive方便了不少。“新建”的功能包括Excel、PowerPoint、Word和OneNote。并提供“以Zip文件下载”。还没有使用过Office2010的保存到SkyDrive的功能,下次要试试了。

Spreadsheet , , ,