Board logo

標題: [發問] EXCEL VBA 4個判斷執行4巨集與3按鈕 [打印本頁]

作者: bqwangs    時間: 2014-1-8 14:34     標題: EXCEL VBA 3個按鈕的判斷動作

我於檔案的工作表1設了3個按鈕
分別為啟動鈕 停止鈕 緊急鈕

作動流程圖 我畫在工作表2
[attach]17221[/attach]
作動方式
啟動鈕:執行綠色線條的流程
一直重複動作 直到按停止鈕才會停止

停止鈕: 執行橘色線條流程
如果停止在1的位置 則立即到END(程式結束)
如果停止在2的位置 則跑橘色路線 最終到END(也就是跑完1各CYCLE)

緊急鈕:執行紅色線條流程
馬上 執行巨集2

請問各位大大
VB碼要如何寫
讓3個按鈕 有上述的動作
作者: bqwangs    時間: 2014-1-9 10:43

[attach]17224[/attach]
提供流程圖給無法下載的大大參考
作者: GBKEE    時間: 2014-1-9 10:49

回復 2# bqwangs
是這樣嗎?
  1. Const Sh = "工作表1"
  2. Dim Msg As Boolean
  3. Sub Sub_Start()
  4.     Msg = True
  5.     With Sheets(Sh)
  6.         If .[C5] = 1 Then
  7.             巨集1
  8.         ElseIf .[C5] = -1 Then
  9.             巨集3
  10.         End If
  11.     End With
  12. End Sub
  13. Sub Sub_stop()
  14.      巨集2
  15. End Sub
  16. Sub 巨集1()
  17.     With Sheets(Sh)
  18.         .Range("A8") = 0
  19.         Do While Msg
  20.            .Range("A8") = 1
  21.             DoEvents
  22.         Loop
  23.     End With
  24. End Sub
  25. Sub 巨集2()
  26.     Msg = False '
  27.     Sheets(Sh).Range("B8") = "0"
  28. End Sub
  29. Sub 巨集3()
  30.     With Sheets(Sh)
  31.         Do While Msg
  32.            .Range("C8") = -1
  33.             DoEvents
  34.         Loop
  35.     End With
  36. End Sub
複製代碼

作者: bqwangs    時間: 2014-1-22 17:32

版大
我執行起來怪怪的
不是我要的結果
應該是我表達的意思 說的不好
我再次說明一下
會有3個按鈕(啟動鈕.停止鈕.緊急鈕)

一.按下啟動鈕
(1)會檢測C5儲存格是否為 1 或 -1
為1執行巨集1
為-1執行巨集3
(2)再次檢測C5儲存格是否為 0
為0執行巨集2
會一直循環上述動作(除非按下停止鈕或緊急鈕 才會停止)

二.按下停止鈕
(1)如果C5儲存格為1 或 -1,會等到C5儲存格為 0 才停止(也就是會執行完巨集2)
(2)如果C5儲存格為0,直接停止(不會執行巨集2)

三.按下緊急鈕
(1)如果C5儲存格為 1 或-1 ,馬上會執行巨集2,立即停止
(2)如果C5儲存格為0,直接停止(不會執行巨集2)(與停止鈕第2條敘述一樣)

======================================
C5儲存格 版大可手動輸入1  或    0   或    -1
會在A6-C6儲存格顯示數字(也就是我要的狀態或燈號)
Sub Macro1()
'' Macro1 Macro
    Range("A6").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("B6").Select
    Selection.ClearContents
End Sub

Sub Macro2()
' Macro2 Macro
    Range("B6").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("A6").Select
    Selection.ClearContents
    Range("C6").Select
    Selection.ClearContents
End Sub

Sub Macro3()
' Macro3 Macro
    Range("C6").Select
    ActiveCell.FormulaR1C1 = "-1"
    Range("B6").Select
    Selection.ClearContents
End Sub
作者: bqwangs    時間: 2014-1-30 10:53

本帖最後由 bqwangs 於 2014-1-30 10:54 編輯
版大
我執行起來怪怪的
不是我要的結果
應該是我表達的意思 說的不好
我再次說明一下
會有3個按鈕(啟動 ...
bqwangs 發表於 2014-1-22 17:32



GBKEE版大

其他大大
能幫我解疑一下??
指導一下
作者: GBKEE    時間: 2014-1-31 08:26

回復 5# bqwangs
  1. '這些程序設在 SHEET1[活頁簿的物件模組]
  2. Option Explicit
  3. Dim Msg As Boolean
  4. Sub 啟動鈕()
  5.     If Msg = True Then Exit Sub                        '停止程式的運行
  6.     If [C5] = 1 Then 巨集1                          '為1執行巨集1
  7.     If [C5] = -1 Then 巨集3                         '為1執行巨集3
  8.     If [C5] = 0 Then 巨集2                          '為1執行巨集2
  9.     Application.OnTime Time + #12:00:01 AM#, "SHEET1.啟動鈕" '間隔一秒執行 啟動鈕
  10.      'Application.Time [時執行的時間],[執行的程序]
  11.      '執行的程序是 SHEET1[活頁簿的物件模組],內的程序要指明物件模組的名稱
  12. End Sub
  13. Sub 停止鈕()
  14.     Do While [C5] <> 0  '會等到C5儲存格為 0 才停止
  15.         DoEvents
  16.     Loop
  17.     Msg = True   '停止再度執行 啟動鈕
  18.     巨集2
  19.     End
  20.     '(1)如果C5儲存格為1 或 -1,會等到C5儲存格為 0 才停止(也就是會執行完巨集2)
  21.     '(2)如果C5儲存格為0,直接停止(不會執行巨集2)
  22.     '歸納(1)(2)->執行巨集2
  23. End Sub
  24. Sub 緊急鈕()
  25.     Msg = True   '停止再度執行 啟動鈕
  26.     巨集2
  27.     End
  28.     '(1)如果C5儲存格為 1 或-1 ,馬上會執行巨集2,立即停止
  29.     '(2)如果C5儲存格為0,直接停止(不會執行巨集2)(與停止鈕第2條敘述一樣)
  30.     '歸納(1)(2)->執行巨集2
  31. End Sub
複製代碼

作者: bqwangs    時間: 2014-2-7 15:43

本帖最後由 bqwangs 於 2014-2-7 15:45 編輯

版主
底下這一行 是每秒鐘跑一次啟動鈕
那我如果C5的訊號為(1 或-1 或 0) 有可能存在1秒 1分 1小時
他不是會執行 1次 60次 3600次??

我要的是 C5的訊號為(1 或-1 或 0)不管存在多久時間
都只會跑1次 直到訊號改變(例如 1->0 或0->-1或 -1>0 或 0->1 )
才會做 下一個動作
  1. Application.OnTime Time + #12:00:01 AM#, "SHEET1.啟動鈕" '間隔一秒執行 啟動鈕
複製代碼
我要的是(停止鈕 緊急鈕)
會停止 但不會再度執行啟動鈕
  1. Msg = True   '停止再度執行 啟動鈕
複製代碼
那要如何改??
作者: bqwangs    時間: 2014-4-8 17:58     標題: EXCEL VBA 4個判斷執行4巨集與3按鈕

本帖最後由 bqwangs 於 2014-4-8 18:01 編輯

有3個按鈕(啟動鈕.停止鈕.緊急鈕)
訊號檢測欄位
我設定為C5儲存格

一.按下啟動鈕
會檢測C5儲存格
C5儲存格    由0變為1執行巨集A
C5儲存格    由1變為0執行巨集B
C5儲存格    由0變為-1執行巨集C
C5儲存格    由-1變為0執行巨集D

會一直循環上述動作(除非按下停止鈕或緊急鈕 才會停止)

二.按下停止鈕
(1)如果C5儲存格為1 或 -1,會等到C5儲存格為 0 才停止{也就是會執行完巨集B(C5儲存格1變0)或巨集D(C5儲存格-1變0)}
(2)如果C5儲存格為0,直接停止(不會執行巨集B或巨集D)

三.按下緊急鈕
(1)如果C5儲存格為 1 或-1 ,會馬上執行巨集B(C5儲存格1變0)或巨集D(C5儲存格-1變0),程式立即停止
(2)如果C5儲存格為0,直接停止(不會執行巨集B或巨集D)(與停止鈕第2條敘述一樣)
作者: bqwangs    時間: 2014-4-10 20:39

GBKEE 版大
現在這個概念
請教要如何寫VB碼
作者: GBKEE    時間: 2014-4-11 07:39

本帖最後由 GBKEE 於 2014-4-11 07:45 編輯

回復 9# bqwangs
是這樣嗎?
工作表模組上的程式碼
  1. Dim Msg(1 To 3) As Boolean, C_5 As Integer, Rng As Range
  2. Private Sub Worksheet_Calculate()
  3.     '2 選 1 :*** 如 C5 為公式 用此重算事件(工作表模組的預設事件程序)
  4.     If Not Msg(1) Then
  5.         MsgBox "尚未 按下啟動紐"
  6.     ElseIf Rng <> C_5 Then
  7.         Ex
  8.     End If
  9. End Sub
  10. Private Sub Worksheet_Change(ByVal Target As Range)
  11.     '2 選 1 :*** 如是直接在C5上改變值 用此工作表上儲存格有改變事件(工作表模組的預設事件程序)
  12.     If Not Msg(1) Then
  13.         MsgBox "尚未 按下啟動紐"
  14.     ElseIf Target.Address = "$C$5" Then
  15.         Ex
  16.     End If
  17. End Sub
  18. Private Sub 啟動鈕()
  19.     Msg(1) = True
  20.     Set Rng = [C5]
  21.     C_5 = [C5]
  22. End Sub
  23. Private Sub 停止鈕()
  24.     Msg(2) = True
  25. End Sub
  26. Private Sub 緊急鈕()
  27.     Msg(3) = True
  28. End Sub
  29. Private Sub Ex()
  30.     If Msg(1) And Not Msg(2) And Not Msg(3) Then '啟動鈕
  31.         Select Case C_5         '先前C5的值
  32.             Case 0              'C_5 = 0
  33.                 If Rng = 1 Then 'C5 變動後的值
  34.                      巨集A
  35.                 ElseIf Rng = -1 Then
  36.                     巨集C
  37.                 End If
  38.             Case 1              'C_5 = 1
  39.                 If Rng = 0 Then 巨集B
  40.             Case -1             'C_5 = -1
  41.                 If Rng = 0 Then 巨集D
  42.         End Select
  43.     ElseIf Msg(2) And Not Msg(3) Then '停止鈕
  44.            If Rng = 0 Then End   '程式停止
  45.            Select Case Rng
  46.             Case 1
  47.                 巨集B
  48.             Case -1
  49.                 巨集D
  50.         End Select
  51.     ElseIf Msg(3) Then          '停止鈕
  52.          If Rng = 0 Then End    '程式停止
  53.            Select Case Rng
  54.             Case 1
  55.                 巨集B
  56.             Case -1
  57.                 巨集D
  58.         End Select
  59.         End                     '程式停止
  60.     End If
  61.     C_5 = Rng                   '紀錄C5的修改
  62. End Sub
複製代碼

作者: bqwangs    時間: 2014-4-22 14:27

[attach]18110[/attach]
版主
我依您的程式碼做成了檔案
有部分功能正常
部分功能無反應
問題點我寫在EXCEL裡
煩請指導一下
作者: bqwangs    時間: 2014-4-22 15:15

增加按鈕作動顏色

開始鈕動作時
開始鈕顯示綠色 其餘灰色
停止鈕動作時
停止鈕顯示紅色 其餘灰色
緊急鈕動作時
緊急鈕顯示紅色 其餘灰色
作者: bqwangs    時間: 2014-4-29 20:26

各位大大
我問題點寫在壓縮檔案裡
請參照
期待各位的回覆




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