Board logo

標題: 該如何取消巨集??? [打印本頁]

作者: color790    時間: 2012-2-8 20:24     標題: 該如何取消巨集???

下面是現在時間+幾秒鐘後run ddd, 請問可以在已經run abc後, 中途停止run ddd嗎??
Sub abc()
Application.OnTime Now + 0.000100, "ddd"
End Sub

Sub ddd()
BEEP
End Sub
作者: GBKEE    時間: 2012-2-8 20:39

回復 1# color790
可詳看VBA 說明:  OnTime方法
  1. Option Explicit
  2. Dim S As Date
  3. Sub abc()
  4.     S = Now + 0.0001   '時間
  5.     Application.OnTime S, "ddd"
  6. End Sub
  7. Sub ddd()
  8.     MsgBox "AAA"
  9.     Beep
  10. End Sub
  11. Sub OnTime_Cancel()  'S 時間之前 取消程式
  12.     Application.OnTime S, "ddd", , False
  13. End Sub
複製代碼

作者: color790    時間: 2012-2-9 00:02

HI~版主
謝謝你的回答, 不好意思, 門外漢發問一下
為什麼一定要這一句 Option Explicit
另外,加上去都會有錯誤, 還是請你幫我看一下好了....

Public x As Long, S As Double

Sub start()
Application.OnKey "{RIGHT}", "go"
Application.OnKey "{LEFT}", "STOPS"
Range("r2:t30,d4:d8,g4:g8,k4:k8,n4:n8").ClearContents
End Sub
Sub go()
k = 2: m = 2: n = 2
Do Until Cells(k, 18) = ""
k = k + 1
Loop
Do Until Cells(m, 19) = ""
m = m + 1
Loop
Do Until Cells(n, 20) = ""
n = n + 1
Loop
If x = 0 Or x = 2 Then
Application.OnTime Now + 0.0001, "test3"
End If
If x = 0 Then S = Timer
Select Case x
Case 0
S = Timer
x = x + 1
Case 1
S = Timer
x = x + 1
Case 2
Cells(k, 18) = (Timer - S) / 86400: S = Timer
x = x + 1
Case 3
S = Timer
x = x + 1
Case 4
Cells(m, 19) = (Timer - S) / 86400: S = Timer
x = x + 1
Case 5
Cells(n, 20) = (Timer - S) / 86400: S = Timer
x = 0
ActiveWorkbook.Save
End Select
End Sub

Sub closefuntion()
Application.OnKey "{RIGHT}"
x = 0
End Sub

Sub test3()
BEEP
End Sub


Sub STOPS()
Application.OnTime Now + 0.0001, "test3", , False
End Sub
作者: Hsieh    時間: 2012-2-9 00:18

回復 3# color790

在程式碼頂端加入Option Explicit   變數強制宣告
在接下來的變數都必須宣告其資料型態
只要沒有宣告就會出錯
加上這行有一個好處,就是如果變數拼錯很容易偵錯
再則,變數確實宣告型態,對程式執行速度有很大幫助
作者: color790    時間: 2012-2-9 23:28

本帖最後由 color790 於 2012-2-9 23:48 編輯

謝謝版主的回答~
另外請問....
這個程式在按右鍵後假設開始計時20秒, 但在第12秒時按了左鍵停止了Sub STOPS()的執行
再按一次右鍵想要再8秒(20-12=8)後執行Sub STOPS()該怎麼改?(形容的不太好,希望版主看的懂)

我是改成這樣, 但按了右鍵再按左鍵,再按右鍵, 卻沒發出聲音..(重點在紅字區,z=0 應該就是指z="上午 12:00:00" 吧????)
Option Explicit
Dim p, w, z As Date
Public x As Long, S As Double

Sub start()
Application.OnKey "{RIGHT}", "go"
Application.OnKey "{LEFT}", "STOPS"
End Sub

Sub go()
If x = 0 Or x = 2 Then
If z <> "上午 12:00:00" Then
w = z - Now
Application.OnTime w, "test3"
Else
p = Now + 0.000112
Application.OnTime p, "test3"
End If
End If

z = 0
End Sub


Sub test3()
BEEP
End Sub


Sub STOPS()
Application.OnTime Now + 0.0001, "test3", , False
x = x - 1
z = p
End Sub
作者: HUNGCHILIN    時間: 2012-2-9 23:35

有點深奧,只能幫的上範例一則

[attach]9524[/attach]
作者: color790    時間: 2012-2-9 23:51

有點深奧,只能幫的上範例一則
HUNGCHILIN 發表於 2012-2-9 23:35


怎麼裡面沒看到東西??
作者: GBKEE    時間: 2012-2-10 08:20

回復 7# color790
執行 UserForm1 看看
作者: color790    時間: 2012-2-10 16:32

本帖最後由 GBKEE 於 2012-2-10 16:40 編輯
回復  color790
執行 UserForm1 看看
GBKEE 發表於 2012-2-10 08:20

    ???? 還是沒有東西,是執行內的那個選項嗎?

[attach]9527[/attach][attach]9527[/attach]
作者: GBKEE    時間: 2012-2-10 16:38

回復 9# color790
重新下載看看

[attach]9528[/attach]
作者: Hsieh    時間: 2012-2-10 21:55

回復 7# color790
阿吉版主提供的範例,2007版以後不能使用
2007版本以後請使用此檔案
[attach]9540[/attach]
作者: color790    時間: 2012-2-11 00:31

原來是降,難怪看不到, 謝謝版主的提供 ^^
來研究一下....
作者: color790    時間: 2012-2-11 09:56

修改如下, 但還是失敗, 按下左鍵(vbKeyLeft)可以這樣用嗎?
p = Now + 0.000112
If vbKeyLeft = True Then
w = Timer
        Do
            DoEvents
            If vbKeyLeft = True Then
            z = (Timer - w) / 86400
            p = p + z
            Exit Do
            End If
        Loop
End If
Application.OnTime p, "test3"
作者: Hsieh    時間: 2012-2-12 00:41

本帖最後由 Hsieh 於 2012-2-12 00:42 編輯

回復 5# color790

你的意思不知是否如此?
注意程序名稱不能使用VBA保留字
  1. Public x As Long, S As Double, t As Date, yn As Boolean

  2. Sub start()
  3. Application.OnKey "{RIGHT}", "gomysub"
  4. Application.OnKey "{LEFT}", "STOPS"
  5. Range("r2:t30,d4:d8,g4:g8,k4:k8,n4:n8").ClearContents
  6. End Sub
  7. Sub gomysub()
  8. k = 2: m = 2: n = 2
  9. Do Until Cells(k, 18) = ""
  10. k = k + 1
  11. Loop
  12. Do Until Cells(m, 19) = ""
  13. m = m + 1
  14. Loop
  15. Do Until Cells(n, 20) = ""
  16. n = n + 1
  17. Loop
  18. If x = 0 Or x = 2 Then
  19. t = Now + 0.0001
  20. Application.OnTime t, "test3"
  21. yn = True
  22. End If
  23. If x = 0 Then S = Timer
  24. Select Case x
  25. Case 0
  26. S = Timer
  27. x = x + 1
  28. Case 1
  29. S = Timer
  30. x = x + 1
  31. Case 2
  32. Cells(k, 18) = (Timer - S) / 86400: S = Timer
  33. x = x + 1
  34. Case 3
  35. S = Timer
  36. x = x + 1
  37. Case 4
  38. Cells(m, 19) = (Timer - S) / 86400: S = Timer
  39. x = x + 1
  40. Case 5
  41. Cells(n, 20) = (Timer - S) / 86400: S = Timer
  42. x = 0
  43. ActiveWorkbook.Save
  44. End Select
  45. End Sub

  46. Sub closefuntion()
  47. Application.OnKey "{RIGHT}"
  48. x = 0
  49. End Sub
  50. Sub test3()
  51. 'Beep
  52. MsgBox t & "時間到"
  53. yn = False
  54. End Sub


  55. Sub STOPS()
  56. If yn = True Then Application.OnTime t, "test3", , False: MsgBox "test3已經停止" Else MsgBox t & "已經運行"
  57. End Sub
複製代碼

作者: color790    時間: 2012-2-12 10:18

回復  color790

你的意思不知是否如此?
注意程序名稱不能使用VBA保留字
Hsieh 發表於 2012-2-12 00:41


謝謝版主~^^
主要是想利用左鍵來達到暫停執行,
如果再按右鍵, 即能回復執行, 但要扣掉剛剛開始到暫停的時間
比如, 一開始按右鍵是 12:50:10(按的當時時間) +10 秒 執行test3
          過了5秒在12:50:15 時按了左鍵, 假設過了3秒再按右鍵, 這時候想在 12:50:23秒執行test3
作者: color790    時間: 2012-2-12 21:11

本帖最後由 color790 於 2012-2-12 21:12 編輯

請問這個a跟b的值為什麼一樣
msgbox不是應該停止程式,當按確定才又開始?

Sub cc()
a = Now + TimeValue("00:00:10")
Cells(1, 1) = a
MsgBox a
b = Cells(1, 1).Value - Now + Now
MsgBox b
End Sub
作者: Hsieh    時間: 2012-2-12 22:21

回復 16# color790


Sub cc()
a = Now + TimeValue("00:00:10")
Cells(1, 1) = a
MsgBox a
b = Cells(1, 1).Value - Now + Now
MsgBox b
End Sub
兩個紅字的NOW值是不同的
作者: color790    時間: 2012-2-13 08:52

對不起版主, 是我腦袋有點打結, 問錯問題
後來看清楚了....   =.=|||




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