仅当计算机锁定时,VBA“必需的对象”错误

时间:2019-07-01 08:55:46

标签: excel vba ms-word

下面的代码扫描提供的doc文件(sp参数),并将表复制到名为“ xxxx”的工作表(在全局变量“ shtTableName”中给出)。 未锁定计算机时,此代码可以正常工作。但是当屏幕/计算机锁定时,此代码无法运行。

我追踪到了问题所在..是因为线

sht.Paste Range("A1")

我尝试过

Acitvesheet.Paste 

但是会引发相同的错误。

我在Excel vba中尝试了所有可能的方法,但没有任何效果,....

最重要的是,当它引发错误时,没有在ErrWord部分中捕获它,它立即将错误引发给调用过程的父错误处理程序。...

我不明白为什么屏幕/计算机锁定会造成这样的问题。 任何帮助将不胜感激。

我正在使用Windows 10版本1808内部版本10730.20348

谢谢 高拉夫

Sub read_word_document(filename As String)

    Dim DOC_PATH As String
    DOC_PATH = filename

    Dim sht As Worksheet
    Dim WordDoc As Word.Document
    Dim WordApp As Word.Application
    Dim i As Long, r As Long, c As Long
    Dim rng As Range, t As Word.Table
    Dim oData As New DataObject 'object to use the clipboard
    Dim bWordDocObjectCreated As Boolean

On Error GoTo ErrWord

        bWordDocObjectCreated = False
        Set WordApp = CreateObject("Word.Application")
        WordApp.Visible = True
        Set WordDoc = WordApp.Documents.Open(DOC_PATH, ReadOnly:=True)
        bWordDocObjectCreated = True 'indicates that object WordDoc has been created and file has been opened

        Set sht = Sheets(shtTableName)
        Set rng = sht.Range("A1")

        For Each t In WordDoc.Tables
            sht.Cells.Delete Shift:=-4162
            sht.Activate
            sht.Range("A1").Select
            t.Range.Copy
            sht.Paste Range("A1")
            'ActiveSheet.Paste
            Exit For 'get only first table
        Next t

        Application.CutCopyMode = False
        oData.SetText Text:=Empty 'Clear
        oData.PutInClipboard 'take it to the clipboard to empty it

        Application.DisplayAlerts = False
        WordDoc.Close False
        WordApp.Quit
        Exit Sub

ErrWord:
        If Not UCase(Err.Description) Like "*CORRUPTED*" And bWordDocObjectCreated = True Then
            Data.SetText Text:=Empty 'Clear
            oData.PutInClipboard 'take in the clipboard to empty it
            Application.CutCopyMode = False
            Application.DisplayAlerts = False
            WordDoc.Close False
        End If

        WordApp.Quit

End Sub

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,但是表现出色。对我有用的解决方案是添加

Application.ScreenUpdating = False在宏的开头。在您的情况下,这可能行不通。

一般来说,模拟屏幕上的用户动作(例如复制/粘贴,发送击键)的宏无法在屏幕锁定时运行-根据我的经验。

在运行宏之前,您可能需要另一个应用程序来确保屏幕已解锁,或者保持屏幕未锁定。我已经成功地将Caffeine用于此目的。