Как решить «не отвечает» при запуске одной команды - PullRequest
0 голосов
/ 27 мая 2019

Я выполняю вызов ODBC для базы данных из формы VBA в Excel.Форма VBA указывает, что процесс выполняется, но если ODBC выполняется слишком долго (а иногда достигает 90-секундного тайм-аута), я получаю «не отвечающий»

, так как вызов ODBC представляет собой одну строкукод, я не могу вставить в DoEvents или любой из обычных способов обновления экрана.Я прочитал Почему VBA говорит "(не отвечает)", даже когда код работает нормально? , и это указывает на то, что мне нужен второй поток.Как мне это сделать?

Call ShowWait("Loading Case Procedures via ODBC", 3)
ShtCPP.AutoFilterMode = False
ShtDocs.AutoFilterMode = False
If ShtCPP.Cells(1, 1) = vbNullString Then ShtCPP.Range("A1:J1") = Array("Date", "Sess", "Thr", "Surgeon", "Case#", "MRN", "Patient", "Procedure", "CMBS", "DocId"): ShtCPP.Range("A1:J1").Font.Bold = True
ShtTL.Cells.Clear
ShtTL.Rows.Delete

vData = Array(Int(Now()), Int(Now()) + 7, vbNullString, "41")
If GetData(Case_Procedures, vData, True) Then
    ShtCPP.Activate
    Application.StatusBar = vbNullString
    Call adjustCPPODBC(ShtTL)
    Call loadCPPODBC(ShtTL)
Else
    MsgBox "Connection failed to collect the procedures." & vbCrLf & _
        "See status on Excel for more information." & vbCrLf & vbCrLf & _
        "You may need to load Case Procedures from exported report."
    If MsgBox("Do you want to mark the process as completed so it doesn't attempt to re-load from ODBC?", vbYesNo + vbDefaultButton2) = vbYes Then
        ShtTables.Cells(2, 78) = Now()
    End If
End If
ShtCPP.Activate
ShtCPP.AutoFilterMode = False
ShtDocs.AutoFilterMode = False
Call ShowWait(, , False)

ShowWait записывает текст в рамку на моей форме, в комплекте с doevents и т. Д. GetData выполняет все операции ODBC, включая загрузку данных на лист и закрытие ODBCподключение.Возвращает True, если это работает, False, если нет (обычно из-за тайм-аута)

Я пытаюсь создать поток, который регулярно обновляет фрейм, чтобы Excel не входил в "неотвечая ", что он может сделать, даже если вызов ODBC в итоге завершится успешно в течение 90-секундного тайм-аута.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...