Board logo

標題: [發問] 請教一下跑迴圈如何使用其他XLS [打印本頁]

作者: yanto913    時間: 2010-10-1 22:30     標題: 請教一下跑迴圈如何使用其他XLS

如題:我寫了一個簡單的VBA但是發現只要開始跑迴圈時,就不能開其他XLS檔與自己檔的其他sheets
Private Sub CommandButton1_Click()
Do While Range("B2") = 1
Range("A1") = Range("A2")
DoEvents
Loop
End Sub

請教各位先進如何在跑迴圈時還可以用其他的EXCEL檔與編輯自己其他的活頁
作者: oobird    時間: 2010-10-1 22:49

可以呀,只是作其他操作時程式會停止運作。回來必須再按一次。
作者: Hsieh    時間: 2010-10-1 23:24

http://forum.twbts.com/thread-37-1-1.html
作者: yanto913    時間: 2010-10-2 01:17

謝謝版主提供的連結,但我還是剛來的"小學生"所以附件不能下載
作者: GBKEE    時間: 2010-10-2 06:43

回復 1# yanto913
指明是哪一個WorkBooks("xxx.xls").Sheets("xxx") 試試看
Private Sub CommandButton1_Click()
Do While WorkBooks("xxx.xls").Sheets("xxx").Range("B2") = 1
WorkBooks("xxx.xls").Sheets("xxx").Range("A1") = WorkBooks("xxx.xls").Sheets("xxx").Range("A2")
DoEvents
Loop
End Sub
作者: yanto913    時間: 2010-10-2 23:52

GBKEE版大
我試過了,可是仍然不能開啟其他EXCEL檔耶!
作者: oobird    時間: 2010-10-3 00:10

我試過可以的。
開本活頁簿的[attach]2971[/attach]其他工作表或另開新檔都沒問題。
作者: yanto913    時間: 2010-10-3 00:14

我將程式修改成如下,結果程式變成不能跑了,而且在未修改前可以跑兩個程式,但開啟其他EXCEL檔後程式會變成跑到另一個新EXCEL做運算(ex,跑到book2.xls中做計數)
Option Explicit
Declare Function SetTimer _
    Lib "user32" ( _
        ByVal hWnd As Long, _
        ByVal nIDEvent As Long, _
        ByVal uElapse As Long, _
        ByVal lpTimerFunc As Long) _
As Long
Declare Function KillTimer _
    Lib "user32" ( _
        ByVal hWnd As Long, _
        ByVal nIDEvent As Long) _
As Long
'EXCEL視窗的handle, id設為1, 每 0.2秒執行1次Asub程序
Sub StartAsub()
    SetTimer Application.hWnd, 1, 200, AddressOf Asub
End Sub
Sub StopAsub()
    KillTimer Application.hWnd, 1
End Sub
Sub StartBsub()
    SetTimer Application.hWnd, 2, 500, AddressOf Bsub
End Sub
Sub StopBsub()
    KillTimer Application.hWnd, 2
End Sub
Sub Asub()
With ActiveSheet.Workbooks("book1.xls").Sheets("sheet1").Range("a1")
    .Value = .Value + 1
End With
End Sub
Sub Bsub()
With ActiveSheet.Workbooks("book1.xls").Sheets("sheet1").Range("b1")
    .Value = .Value + 1
End With
End Sub
作者: GBKEE    時間: 2010-10-3 06:32

回復 8# yanto913
With ActiveSheet.Workbooks("book1.xls").Sheets("sheet1").Range("b1")
語法錯誤  請去掉 ActiveSheet.
作者: yanto913    時間: 2010-10-3 11:19

版大們,去掉 ActiveSheet.,可以開但是會發生
1.當Sheet1跳到Sheet2沒問題,Sheet2再跳到Sheet3就會錯誤了
2.當要編輯儲存格時也會發生錯誤(A1仍在計數中)
作者: GBKEE    時間: 2010-10-3 14:35

本帖最後由 GBKEE 於 2010-10-3 14:36 編輯

回復 10# yanto913
API 函數我不熟, 還是回到你一樓的DO  LOOP 迴圈試試看,但還是有缺點 如儲存格有在作輸入動作,程式會停止
Module的程式碼
  1. Dim MyTime As Single, MyStop As Boolean
  2. Private Const PauseTime = (1 / 60) * 2  ' " * 2 " ->  "0.2秒"
  3. Sub StartAsub()
  4.     MyStop = False
  5.     MyTime = Timer + PauseTime
  6.     Do
  7.         If MyTime <= Timer Then
  8.             MyTime = Timer + PauseTime
  9.             With Workbooks("Book1.xls").Sheets("Sheet1").Range("a1")
  10.                 .Value = .Value + 1
  11.             End With
  12.         End If
  13.         DoEvents
  14.     Loop While MyStop = False
  15. End Sub
  16. Sub StopAsub()
  17.     MyStop = True
  18. End Sub
複製代碼

作者: et5323    時間: 2010-10-3 23:01

1.你的代碼應該根本就不能運行,因為Settimer的回調函數就不是象你的Asub和Bsub那樣寫的,具體的查MSDN。
2.由於用了API,很容易就崩潰或陷入閉環的下場。
3.最好還是考慮用VBA的onTime來寫。
作者: yanto913    時間: 2010-10-7 09:41

謝謝et5323 ,我再試試onTime的方法...多謝!




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