剛接觸vb編程不久,遇到個問題,需求如下:
1. A列通過SQL SERVER存盤程序回傳日期資訊,比如20170724,20170723,20170722,...
2. B列在等待A列回傳后,以同行A列日期為引數,呼叫外部函式回傳某些資料
比如B3 = Func(Constant_Number,$A3)
3. 執行第二個存盤程序,把B列的函式回傳的結果作為引數進行保存.(錄入資料庫)
本來的執行程序應該是:
1. 打開這個Excel,VB默認開始呼叫第一個存盤程序,并回傳日期
2. 函式拿到日期欄位,開始計算并回傳結果到B列,這個程序大概需要一到三秒鐘
3. 將函式回傳所在B列欄位進行回傳
問題: 第二個存盤程序先于函式執行,就是說函式還在做計算的時候,該單元格顯示為fetching,此時還未等函式回傳,后面的存盤程序就開始執行了,本來要錄入資料庫的應該是
Func(Constant_Number,$Ax),實際上錄入的是"fetching..." 囧
嘗試解決:
1. Application.Wait waitTime (失敗)
2. Sleep xxxx (失敗)
目前折中解決辦法:添加一個按鈕,把第二個存盤程序執行放在按鈕里,等函式執行結果回傳以后點一下...
求助各位:怎么才能在不影響函式執行的前提下讓VB暫停,等函式執行結束以后再繼續向下運行?
uj5u.com熱心網友回復:
你就不能自己判斷“呼叫的外部程序”是否執行結束嗎!
uj5u.com熱心網友回復:
采用同步方式呼叫存盤程序uj5u.com熱心網友回復:
自己解決了, 用以下代碼Dim newtime As Date
newtime = Now + TimeValue("00:00:05")
'MsgBox "準備執行xxx"
Application.OnTime newtime, "xxx"
謝了各位.
uj5u.com熱心網友回復:
請問如何判斷呢?
新手一枚,求告知,多謝!
uj5u.com熱心網友回復:
感謝回復,我試著用ontime實作了, 請問還有其他方法嗎?
uj5u.com熱心網友回復:
你呼叫的“外部程序”,它執行完成后,總有“事件通知”或“回呼程序”吧!
你自己用一個模塊級或全域的“狀態變數”進行一下標識、判斷,不就好了!

“等待”可以用Do回圈+Sleep(),也可以用WaitForSingleObject( )。
uj5u.com熱心網友回復:
把程式放在虛擬機里面運行,使用虛擬機的優雅的暫停功能即可。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/55861.html
標籤:VBA
上一篇:用VB做電子琴 暫停播放檔案
