Board logo

標題: [發問] 用 FindWindow 代替 CreateObject("Wscript.shell").Popup 的自動關閉?? [打印本頁]

作者: t8899    時間: 2013-8-21 09:12     標題: 用 FindWindow 代替 CreateObject("Wscript.shell").Popup 的自動關閉??

本帖最後由 t8899 於 2013-8-21 09:20 編輯

由於 CreateObject("Wscript.shell").Popup 的自動關閉功能,當整個工作表DDE連結太多時會失效
想用FindWindow 來代替自動關閉功能

用以下測試找不到CreateObject("Wscript.shell").Popup 的訊息窗 ??
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Worksheet_Calculate()
If FindWindow("XLMAIN", "Auto Closed MsgBox") <> 0 Then msgbox "找到"
End Sub
Auto Closed MsgBox  ====>訊息視窗的標題
還有用FindWindowJ找到後 3秒鐘自動關閉
這段巨集要怎麼寫??
作者: stillfish00    時間: 2013-8-21 10:04

回復 1# t8899
不如改用這個API
  1. Private Declare Function MsgBoxTest Lib "user32" Alias "MessageBoxTimeoutA" ( _
  2.     ByVal hwnd As Long, _
  3.     ByVal lpText As String, _
  4.     ByVal lpCaption As String, _
  5.     ByVal wType As VbMsgBoxStyle, _
  6.     ByVal wlange As Long, _
  7.     ByVal dwTimeout As Long) As Long

  8. Sub Test()
  9.   MsgBoxTest 0, "2.5秒後關閉", "標題", vbYesNo + vbInformation, 0, 2500
  10. End Sub
複製代碼

作者: t8899    時間: 2013-8-21 10:22

本帖最後由 t8899 於 2013-8-21 10:24 編輯
回復  t8899
不如改用這個API
stillfish00 發表於 2013-8-21 10:04


msgbox 可以輸出變數值???
如何套用?
像CreateObject("Wscript.shell").Popup sStr2, 3, "Auto Closed MsgBox", 64
sstr2 為變數值
作者: stillfish00    時間: 2013-8-21 11:35

回復 3# t8899
看不懂你再問什麼
作者: t8899    時間: 2013-8-21 11:53

本帖最後由 t8899 於 2013-8-21 11:55 編輯
回復  t8899
看不懂你再問什麼
stillfish00 發表於 2013-8-21 11:35

我已經懂了,等明天測試..謝謝!
MsgBoxTest 0, "2.5秒後關閉", "標題", vbYesNo + vbInformation, 0, 2500
這兩個0的有何意義?
作者: t8899    時間: 2013-8-21 12:29

回復  t8899
看不懂你再問什麼
stillfish00 發表於 2013-8-21 11:35


型態不符合????????????

Private Declare Function MsgBoxTest 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 Worksheet_Calculate()
Application.DisplayStatusBar = False

      Dim sStr$
Dim ZZ As Range
      sStr = ""
       sStr2 = ""
   For Each ZZ In Range("c2:c111")
    If Not IsError(ZZ) Then
        If Range("R26").Value = 2 Then Range("U26").Value = 1
         If Range("Q26").Value = 1 And Range("U26").Value = 1 And flag = True Then
      M = Round(ZZ - ZZ.Offset(, 26), 2)
                            If M >= ZZ.Offset(, 2) Then
                              If sStr <> "" Then sStr = sStr & Chr(10)
         sStr = sStr & "===> " & Cells(ZZ.Row, 2).Value & "=====> " & Round(ZZ - ZZ.Offset(, 26), 2) & "===>" & ZZ.Offset(, 26) & "===>" & ZZ
          Application.EnableEvents = False
  ZZ.Offset(, 26) = ZZ
Application.EnableEvents = True
                  End If
                If M <= -ZZ.Offset(, 2) Then
                 If sStr2 <> "" Then sStr2 = sStr2 & Chr(10)
        sStr2 = sStr2 & "===> " & Cells(ZZ.Row, 2).Value & "=====> " & Round(ZZ - ZZ.Offset(, 26), 2) & "===>" & ZZ.Offset(, 26) & "===>" & ZZ
        Application.EnableEvents = False
  ZZ.Offset(, 26) = ZZ
Application.EnableEvents = True
                  End If
    End If
    End If
       Next
  If sStr <> "" Then
   MsgBoxTest 0, "", "", sStr, 0, 2500
'----------------
  If sStr2 = "" Then  
If Range("R26").Value = 1 Then Range("U26").Value = 2
      '    Range("Q26").Value = 2
  ' Application.OnTime Now + TimeValue("00:00:15"), "fff"
    End If      
  '----------------------------------------
     End If
      
     If sStr2 <> "" Then
   MsgBoxTest 0, "", "", sStr2, 0, 2500
  If Range("R26").Value = 1 Then Range("U26").Value = 2
   
      End If

end sub
作者: stillfish00    時間: 2013-8-22 09:42

回復 5# t8899
第一個參數,是owner視窗句柄,沒用就設0
第五個參數,應是語言的ID,沒使用過...都是設為零
最後一個2500為關閉時間,單位毫秒

[attach]15830[/attach]
作者: t8899    時間: 2013-8-22 10:42

回復  t8899
第一個參數,是owner視窗句柄,沒用就設0
第五個參數,應是語言的ID,沒使用過...都是設為零 ...
stillfish00 發表於 2013-8-22 09:42


MsgBoxTest 0, "", "", sStr2, 0, 2500
第六樓sstr2 有錯vbinformation ===>不含變數 ???
但單純的類似Range("Q26").Value是可以的




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)