標題:
[發問]
程式流程控制問題
[打印本頁]
作者:
blue2263
時間:
2016-10-6 07:55
標題:
程式流程控制問題
我的問題如下圖,請教大大程式碼要如何更改?
[attach]25451[/attach]
麻煩大大幫忙解答,感恩謝謝!!
[attach]25452[/attach]
作者:
GBKEE
時間:
2016-10-6 09:09
回復
1#
blue2263
請修正
[attach]25453[/attach]
作者:
blue2263
時間:
2016-10-6 20:32
G大您好
不好意思,測試修正時改到一些內容,己更改好了
[attach]25463[/attach]
作者:
blue2263
時間:
2016-10-8 07:16
本帖最後由 blue2263 於 2016-10-8 07:26 編輯
回復
2#
GBKEE
G大您好
不好意思,不會跳回主程式,的問題還是存在?
之前測試時,更改了程式內容,忘記改回來,請以測試修正2查看,謝謝
[attach]25487[/attach]
還請G大幫忙解答,感恩謝謝!!!
作者:
c_c_lai
時間:
2016-10-8 08:23
回復
4#
blue2263
試試看
Sub 開始執行()
Dim startOn As Boolean
Set MyBook = ThisWorkbook
aTime = "08:44:00" ' 早 盤 開盤時間 "08:44:00"
bTime = "13:45:05" ' 早 盤 收盤時間 "13:45:00"
cTime = "14:35:00" ' 電子盤 開盤時間 "14:35:00"
dTime = "23:59:50" ' 電子盤 換日時間 "00:00:00"
eTime = "03:00:05" ' 電子盤 收盤時間 "03:00:00"
startOn = False
' 等候至早上開盤 , 自動執行主程式
If Time > TimeValue("03:00:00") And Time < TimeValue("13:45:00") Then
startOn = True
Set Sht1 = MyBook.Sheets("a")
aaTime = bTime ' 停止記錄時間 "13:45:00"
If Time < TimeValue("08:44:00") Then
Application.StatusBar = "※現在尚未開盤,程式等待至8:45開盤自動執行"
Application.OnTime TimeValue("08:44:05"), "開始"
Application.OnTime TimeValue("08:44:10"), "自動記錄"
Else
Call 開始
Call 自動記錄
End If
End If
' 等候至中午電子盤 , 開盤自動執行主程式
If Time > TimeValue("13:45:00") And Time < TimeValue("23:59:59") Then
startOn = True
Set Sht1 = MyBook.Sheets("b")
aaTime = dTime ' 停止記錄時間 "00:00:00"
If Time < TimeValue("14:34:00") Then
Application.StatusBar = "※現在尚未開盤,程式等待至14:35:00開盤自動執行"
Application.OnTime TimeValue("14:34:05"), "開始"
Application.OnTime TimeValue("14:34:10"), "自動記錄"
Else
Call 開始
Call 自動記錄
End If
End If
' 等候至中午電子盤(換日) , 開盤自動執行主程式
If Time > TimeValue("00:00:01") And Time < TimeValue("03:00:00") Then
startOn = True
Set Sht1 = MyBook.Sheets("b")
aaTime = eTime ' 停止記錄時間 "03:00:05"
If Time < TimeValue("00:00:30") Then
Application.OnTime TimeValue("00:00:30"), "開始"
Application.OnTime TimeValue("00:00:35"), "自動記錄"
Else
Call 開始
Call 自動記錄
End If
End If
If startOn Then Application.OnTime Now + TimeValue("00:00:01"), "開始執行" ' 每一秒遞迴一次
End Sub
Sub 自動記錄()
If uMode = 0 Then Exit Sub
If Time > TimeValue(aaTime) Then ' 收盤時間以後不執行
Application.DisplayStatusBar = True ' 打開狀態列。
Application.StatusBar = "收盤"
ActiveWorkbook.Save ' 當前工作表儲存
Exit Sub
End If
' 每分鐘記錄----------------------------------------------------------
If Second(Time) = 0 Then
xRow = Sht1.Range("A8").End(xlDown).Row ' 由上往下找
Sht1.Range("B1") = xRow + 1
Sht1.Range("A10").EntireRow.Insert
Sht1.Range("A10:CZ10").Value = Sht1.Range("A9:CZ9").Value
Sht1.Range("b10") = Time
End If
End Sub
複製代碼
作者:
blue2263
時間:
2016-10-8 13:19
回復
5#
c_c_lai
測試是可以順利進行,上下午盤的每分記錄
不過巨集更改後,有幾個延伸的小問題,想請教
1.巨集更改後,畫面會不停閃爍
2.程式執行後,如想停止執行,會無法停止
感謝C大幫忙,謝謝
作者:
blue2263
時間:
2016-10-8 14:36
本帖最後由 blue2263 於 2016-10-8 14:41 編輯
回復
5#
c_c_lai
Sub 自動記錄()
If uMode = 0 Then Exit Sub
If Time > TimeValue(aaTime) Then '收盤時間以後不執行
Application.DisplayStatusBar = True '打開狀態列。
Application.StatusBar = "收盤"
'ActiveWorkbook.Save '當前工作表儲存
Application.Wait (Now + TimeValue("0:00:10")) '等待x秒後進行
Call 開始執行
Exit Sub
End If
'每分鐘記錄----------------------------------------------------------
If Second(Time) = 0 Then
xRow = Sht1.Range("A8").End(xlDown).Row '由上往下找
Sht1.Range("B1") = xRow + 1
Sht1.Range("A10").EntireRow.Insert
Sht1.Range("A10:CZ10").Value = Sht1.Range("A9:CZ9").Value
Sht1.Range("b10") = Time
End If
Application.OnTime Now + TimeValue("00:00:01"), "自動記錄" '每一秒遞迴一次
End Sub
複製代碼
C大您好
我增加第9列程式碼,跳回主程式便可正常執行
感謝C大熱心幫忙,謝謝!!
作者:
GBKEE
時間:
2016-10-8 14:44
本帖最後由 GBKEE 於 2016-10-8 16:18 編輯
回復
7#
blue2263
試試看
Option Explicit
Public uMode&, xTime(1 To 5)
Public MyBook As Workbook, Sht1 As Worksheet, Sht2 As Worksheet, xRow&, 更新判斷
Sub 開始執行()
Set MyBook = ThisWorkbook
xTime(1) = #3:00:00 AM# '電子盤 收盤時間 "03:00:00"
xTime(2) = #8:44:00 AM# '早盤 開盤時間 "08:44:00"
xTime(3) = #1:45:00 PM# '早盤 收盤時間 "13:45:00"
xTime(4) = #2:35:00 PM# '電子盤 開盤時間 "14:35:00"
If Time <= #11:59:59 AM# Then
Set Sht1 = MyBook.Sheets("a") '早盤
If Time <= xTime(1) Or Time >= xTime(2) Then
If Time <= xTime(1) Then Set Sht1 = MyBook.Sheets("b") '電子盤
設定
自動記錄
Else '早盤
xTime(5) = xTime(2) - #12:00:05 AM#
Application.OnTime xTime(5), "設定"
xTime(5) = xTime(2) + #12:00:10 AM#
Application.OnTime xTime(5), "自動記錄"
End If
Else
Set Sht1 = MyBook.Sheets("B") '電子盤
If Time <= xTime(3) Or Time >= xTime(4) Then
If Time <= xTime(3) Then Set Sht1 = MyBook.Sheets("a") '早盤
設定
自動記錄
Else
xTime(5) = xTime(4) - #12:00:05 AM#
Application.OnTime xTime(5), "設定"
xTime(5) = xTime(4) + #12:00:10 AM#
Application.OnTime xTime(5), "自動記錄"
End If
End If
End Sub
Sub 自動記錄()
Dim Msg As Boolean
If uMode = 0 Then Exit Sub
If Time <= #11:59:59 AM# Then
If Time > xTime(1) And Time < xTime(2) Then
Msg = True
xTime(5) = xTime(2) - #12:00:05 AM#
Application.OnTime xTime(5), "設定"
xTime(5) = xTime(2) + #12:00:10 AM#
Application.OnTime xTime(5), "自動記錄"
Application.StatusBar = "早盤 開盤時間" & xTime(5)
End If
Else
If Time > xTime(3) And Time < xTime(4) Then
Msg = True
xTime(5) = xTime(2) - #12:00:05 AM#
Application.OnTime xTime(5), "設定"
xTime(5) = xTime(2) + #12:00:10 AM#
Application.OnTime xTime(5), "自動記錄"
Application.StatusBar = "電子盤 開盤時間" & xTime(5)
End If
End If
If Msg Then
Application.DisplayStatusBar = True '打開狀態列。
'Application.StatusBar = "收盤"
ActiveWorkbook.Save '當前工作表儲存
Exit Sub
End If
'每分鐘記錄----------------------------------------------------------
' If Second(Time) = 0 Then
xRow = Sht1.Range("A8").End(xlDown).Row '由上往下找
Sht1.Range("B1") = xRow + 1
Sht1.Range("A10").EntireRow.Insert
Sht1.Range("A10:CZ10").Value = Sht1.Range("A9:CZ9").Value
Sht1.Range("b10") = Time
' End If
'********每分鐘記錄- 畫面不會不停閃爍了****************
xTime(5) = TimeSerial(Hour(Time), Minute(Time) + 1, 0)
Application.OnTime xTime(5), "自動記錄" '每分遞迴一次
End Sub
Sub 設定()
uMode = 1
Sht1.Select
Sht1.Range("a9") = Date '日期
Application.DisplayStatusBar = False '關閉狀態列。
End Sub
Sub 開始()
開始執行
End Sub
Sub 停止執行()
uMode = 0
Application.DisplayStatusBar = True '打開狀態列。
Application.StatusBar = "己停止執行"
If Not IsEmpty(xTime(5)) And Time < xTime(5) Then
Application.OnTime xTime(5), "自動記錄", Schedule:=False '停止未執行的 OnTime排程
End If
End Sub
複製代碼
作者:
c_c_lai
時間:
2016-10-8 15:22
回復
6#
blue2263
你原本的程式碼便會有此問題,差別是當你第一次執行
自動記錄() 一直到 If Time > TimeValue(aaTime) Then
料離後便停止不再執行了。 (只 RUN 第一迴輪而已)。
所以在每一秒的視覺上(畫面會不停閃爍)自然會有所不同。
修正後的程式才是正常運作的過程。(三種判斷皆過濾)
當然她會一直執行到條件滿足為止。
如果你想令它能中途停止,則需加入插斷判斷。
修改 (公用變數增加 stp )
Public uMode&, aTime, bTime, cTime, dTime, eTime, aaTime, bbTime, stp As Boolean
Public MyBook As Workbook, Sht1 As Worksheet, Sht2 As Worksheet, xRow&, 更新判斷, xTime
Sub 開始執行()
Dim startOn As Boolean
If stp Then stp = False: Exit Sub ' 插斷
Set MyBook = ThisWorkbook
複製代碼
增加
Sub 插斷()
stp = True
End Sub
複製代碼
工作表上增加一 "按鈕" 指定巨集指向 "插斷()" 即可,
點選它便停止執行;接這再次點選它,便又繼續執行了。
作者:
c_c_lai
時間:
2016-10-8 15:35
回復
7#
blue2263
其實道理是一樣的。
你也可加入 #9 增加的部份。
作者:
blue2263
時間:
2016-10-9 10:24
回復
8#
GBKEE
感謝G大
測試可用,原來也有此類寫法,受用了
謝謝G大熱心幫忙!!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)