首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从多个Word文档中提取数据和解决运行时错误代码“4605”所需的Excel宏修改

从多个Word文档中提取数据和解决运行时错误代码“4605”所需的Excel宏修改
EN

Stack Overflow用户
提问于 2022-11-07 14:57:48
回答 2查看 78关注 0票数 -1

我已经有了Excel中的宏,它从指定Word文档中的特定表、行和列中提取数据,并将其返回到Excel s/sheet中的单元格中。我需要对代码做2次修改,但我的知识还不够先进。

  1. 我需要在指定文件夹中的多个Word文档上运行这段代码,无论它是.doc还是.docx

  1. --我需要确定为什么在某些Word文档上,代码无法从Word文档中提取数据,并且我得到运行时错误代码'4605‘,因为没有选择文本,所以方法或属性不可用。我试着在模块开始时输入“启动错误简历”,这样它就会一直运行到最后,希望一些文本能够通过,但我的Excel /工作表中的单元格仍然没有被填充。

代码语言:javascript
运行
复制
Sub ImportFromWord()

On Error Resume Next

  'Activate Word Object Library

  Dim WordDoc As Word.Document

  Set WordApp = CreateObject("word.application") ' Open Word session

  WordApp.Visible = False 'keep word invisible
  Set WordDoc = WordApp.Documents.Open("C:\Users\brendan.ramsey\OneDrive - Ofcom\Objectives\Brendan's Objectives 2022-23\Licence calls\test 2.docx") ' open Word file

  'copy third row of first Word table
  WordDoc.Tables(1).Cell(Row:=1, Column:=3).Range.Copy

  'paste in Excel
  Range("A3").PasteSpecial xlPasteValues
  
  WordDoc.Tables(4).Cell(Row:=3, Column:=6).Range.Copy
  Range("B3").PasteSpecial xlPasteValues
  
  WordDoc.Tables(4).Cell(Row:=3, Column:=3).Range.Copy
  Range("C3").PasteSpecial xlPasteValues
  
  WordDoc.Tables(5).Cell(Row:=2, Column:=5).Range.Copy
  Range("D3").PasteSpecial xlPasteValues
  
  WordDoc.Tables(5).Cell(Row:=2, Column:=7).Range.Copy
  Range("E3").PasteSpecial xlPasteValues
  
  WordDoc.Tables(5).Cell(Row:=2, Column:=2).Range.Copy
  Range("F3").PasteSpecial xlPasteValues



  WordDoc.Close 'close Word doc
  WordApp.Quit ' close Word

End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-07 18:48:26

如果避免复制/粘贴和直接传输单元格内容,代码可能表现得更好:

代码语言:javascript
运行
复制
Sub ImportFromWord()
    Const FLDR_PATH As String = "C:\Temp\Docs\"
    Dim WordDoc As Word.Document, WordApp As Word.Application
    Dim rw As Range, f
    
    Set rw = ActiveSheet.Rows(3) 'or some other sheet

    f = Dir(FLDR_PATH & "*.doc*") 'check for document
    Do While Len(f) > 0
        
        If WordApp Is Nothing Then 'open word if not already open
            Set WordApp = CreateObject("word.application")
            WordApp.Visible = False
        End If
        
        With WordApp.Documents.Open(FLDR_PATH & f, ReadOnly:=True) ' open Word file
        
            WordCellToExcel .Tables(1).Cell(Row:=1, Column:=3), rw.Cells(1)
            WordCellToExcel .Tables(4).Cell(Row:=3, Column:=6), rw.Cells(2)
            WordCellToExcel .Tables(4).Cell(Row:=3, Column:=3), rw.Cells(3)
            'etc etc
            .Close savechanges:=False
        End With
        
        Set rw = rw.Offset(1) 'next row down
        f = Dir()             'next file, if any
    Loop
    
    If Not WordApp Is Nothing Then WordApp.Quit ' close Word if it was opened

End Sub

'transfer content from a cell in a Word Table to an Excel range
Sub WordCellToExcel(wdCell As Word.Cell, destCell As Range)
    Dim v
    v = wdCell.Range.Text
    destCell.Value = Left(v, Len(v) - 2) 'remove "end of cell" marker
End Sub
票数 0
EN

Stack Overflow用户

发布于 2022-11-07 15:59:00

运行时错误代码“4605”方法或属性不可用,因为没有选定文本。

运行时代码4605在Microsoft运行时出现故障或崩溃。这并不一定意味着代码在某种程度上是损坏的,而仅仅意味着它在运行时无法工作。除非进行处理和纠正,否则这种错误将在屏幕上显示为一个恼人的通知。以下是解决问题的症状、原因和方法。

正如错误消息所述,没有选定文本。为了找出哪个属性或方法给出了错误消息,我建议在一个单独的行上声明每个属性或方法调用,从而打破代码单行中的调用链,这样您就会知道哪个调用完全失败了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74348598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档