2014-11-07 2 views
2
Option Explicit 
Declare Sub Sleep Lib "kernel32" _ 
(ByVal dwMilliseconds As Long) 
Dim status As String 


Sub StartModule() 

    Dim index As Integer 
    Dim result As String 
    Dim o: Set o = CreateObject("NAddIn.Functions") 
    status = "" 
    Do Until status = "DADA" 
     result = o.getRandomNumber 
     Range("F2").Value = result 
     Sleep123 
     If status = "EXIT" Then Exit Do 
    Loop 
End Sub 

Sub StopModule() 
    status = "EXIT" 
End Sub 


Sub Sleep123() 
    Sleep 1000 'Implements a 1 second delay 
End Sub 

이 vba 스크립트는 dll 파일의 사용자 정의 함수 인 getRandomNumber()이라는 호출입니다. 시작 버튼을 클릭하여 실행 한 후 난수를 연속적으로 생성하여 셀에 표시하는 기능을 실행할 수 있습니다.vba 스크립트가 계속 실행되는 동안 excel에서 셀을 편집하는 방법

문제는 내가 멈춤 버튼을 클릭하거나 셀을 편집 할 수없고 심지어 xl 파일을 닫을 수 없다는 것입니다.

답변

1

Sleep API를 사용하지 마십시오. 절전 기능은 지정된 간격 동안 현재 스레드의 실행을 일시 중지 할뿐만 아니라 다른 작업을 수행하도록 허용하지 않습니다. 즉 Excel이 정지됩니다. 몇 년 전에 작성한이 사용자 정의 함수 Wait을 사용하십시오.

Option Explicit 

Dim status As String 

Sub StartModule() 
    Dim index As Integer 
    Dim result As String 

    Dim o: Set o = CreateObject("NAddIn.Functions") 
    status = "" 

    Do Until status = "DADA" 
     result = o.getRandomNumber 
     Range("F2").Value = result 
     Wait 1 '<~~ Wait for a second 
     If status = "EXIT" Then Exit Do 
    Loop 
End Sub 

Sub StopModule() 
    status = "EXIT" 
End Sub 

Private Sub Wait(ByVal nSec As Long) 
    nSec = nSec + Timer 
    While nSec > Timer 
     DoEvents 
    Wend 
End Sub 

그렇다면 타이머를 1 초로 설정하면 셀을 편집하지 않는 것이 좋습니다. 편집 모드에서 Excel은 셀 F2에 쓸 수 없으므로 오류가 발생합니다. 이 경우 타이머를 늘리십시오.

관련 문제