- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
8#
發表於 2013-8-6 11:23
| 只看該作者
本帖最後由 stillfish00 於 2013-8-6 11:35 編輯
回復 3# ahsiek
詢問的問題如下:
1. AA(工作表)開始後無法自動停止,我設定在ROW33後就停止儲存
結果,在ROW33是停了,但它就跑到ROW2、3,就在那裡繼續作動作。
這是我哪裡寫錯了嗎?
首先你用這取最後一行的行號
endCol = 工作表29.Cells(33, 1).End(xlUp).Row
End(xlUp)相當於按 END+向上鍵,當A1~A33都有值時,這行取到的是1
再來你用
If ActiveCell.Row > 33 Then End '限制總列數
If ActiveCell.Column = 30 Then End '中途中止
但是程式中實際ActiveCell卻一直是固定同一格,當然不會終止
而且切換工作表ActiveCell也會變...........
2. BB(工作表)也是如此,這兩個工作表的錄製是一樣的。所以也是不會自動停下來。
3. AA(工作表),一旦按下開始動作,若我再去BB(工作表)按下任意鍵,則AA(工作表)和BB(工作表)都不會動了。
4. AA(工作表),若按下終止鍵,結果連BB(工作表)也跟著不會動了。
基本上我會重寫如下,你可以參考看看:
- Private gbStop1 As Boolean
- Private gbStop2 As Boolean
- Sub ButtonStart1() 'AA工作表開始按鈕
- gbStop1 = False
- With ActiveSheet
- .UsedRange.Offset(3).ClearContents
- SetTimer1 .Name
- End With
- End Sub
- Sub ButtonStop1() 'AA工作表停止按鈕
- gbStop1 = True
- End Sub
- Sub ButtonStart2() 'BB工作表開始按鈕
- gbStop2 = False
- With ActiveSheet
- .UsedRange.Offset(3).ClearContents
- SetTimer2 .Name
- End With
- End Sub
- Sub ButtonStop2() 'BB工作表停止按鈕
- gbStop2 = True
- End Sub
- '將不同表的排程部分/限制行數/分離出來
- Sub SetTimer1(sSheetName As String)
- Const MAX_ROW = 34
- '未達限制行數且沒按停止鈕則排程1秒後再度執行
- If mainFunc(sSheetName) < MAX_ROW And Not gbStop1 Then Application.OnTime Now + TimeValue("00:00:01"), "'SetTimer1 """ & sSheetName & """'"
- End Sub
- Sub SetTimer2(sSheetName As String)
- Const MAX_ROW = 270
- If mainFunc(sSheetName) < MAX_ROW And Not gbStop2 Then Application.OnTime Now + TimeValue("00:00:01"), "'SetTimer2 """ & sSheetName & """'"
- End Sub
- Function mainFunc(sSheetName As String) As Long
- Dim i As Long
-
- With Sheets(sSheetName)
- i = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
- '...記錄log
- .Cells(i, "A") = Format(Time, "Hh:Mm:Ss")
- .Cells(i, "J").Resize(, 8).Value = .Cells(3, "B").Resize(, 8).Value
- End With
-
- mainFunc = i '回傳當前列數
- End Function
複製代碼 |
|