下面的代码扫描提供的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
答案 0 :(得分:0)
我有一个类似的问题,但是表现出色。对我有用的解决方案是添加
Application.ScreenUpdating = False
在宏的开头。在您的情况下,这可能行不通。
一般来说,模拟屏幕上的用户动作(例如复制/粘贴,发送击键)的宏无法在屏幕锁定时运行-根据我的经验。
在运行宏之前,您可能需要另一个应用程序来确保屏幕已解锁,或者保持屏幕未锁定。我已经成功地将Caffeine用于此目的。