簡體   English   中英

MS Word中的VB宏

[英]VB macro in MS word

當我打開word然后打開測試文檔時,以下代碼將按預期工作。 但是,如果我打開測試文檔以啟動Word的第一個實例,則在Word加載時計時器啟動。 然后,Word處於加載狀態,直到計時器用盡,文檔關閉並打開一個空的Word應用程序。 預期的操作是打開的文檔; 如果閑置了設定的時間,請保存並關閉文檔。

我有共享文檔的用戶,並且有一個壞習慣,那就是在打開文檔時鎖定他們的計算機,並從其他任何編輯它的人那里鎖定文件。 這樣做的目的是保存文件並在x時間后關閉文檔。

Private Sub Document_open()
 StartCheckingIdle
End Sub

下面的TIMEOUTTIME設置為5秒以進行測試,但是將其設置為5分鍾,如果在雙擊文檔以將其打開之前未打開Word,則該文檔僅處於加載狀態五分鍾。

Option Explicit

'Set the constant below for how long you want it to be idle before triggering
' Enter the time in hours:minutes:seconds form, like "00:30:00" for 30 minutes
Private Const TIMEOUTTIME As String = "00:00:05"

Private Declare Function GetQueueStatus Lib "user32" (ByVal fuFlags As Long) As Long
Private Const QS_KEY = &H1
Private Const QS_MOUSEMOVE = &H2
Private Const QS_MOUSEBUTTON = &H4
Private Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON)
Private Const QS_INPUT = (QS_MOUSE Or QS_KEY)
Private bCancel As Boolean
Private Sub WaitForIdle()
 Dim t As Double
 t = Now
 Do While bCancel = False
  If GetQueueStatus(QS_INPUT) Then
   t = Now
   DoEvents
  End If
  If Now - t >= TimeValue(TIMEOUTTIME) Then Exit Do
 Loop
End Sub
Public Sub StartCheckingIdle()
 Do Until bCancel
  WaitForIdle
  If bCancel = False Then
   bCancel = True
   ThisDocument.Close True
  End If
  Do Until GetQueueStatus(QS_INPUT) Or bCancel
   DoEvents
  Loop
 Loop
End Sub
Public Sub StopCheckingIdle()
 bCancel = True
End Sub

目前正在嘗試處理Word文檔,但最終還需要將其應用於excel文件。 是的,我從這里的另一個問題探究了此代碼,盡管我認為它可能有些過時了。 我正在運行Office 2010。

可以嘗試首先在文檔中檢查活動窗口。

Private Sub Document_Open()
    Do While Application.ActiveWindow.Active = False
        DoEvents
    Loop
    MsgBox "Open"
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM