使用Excel宏VBA将Word文档中的第一个表复制到Excel

尼哈尔白痴

我是Excel Macro和VBA的新手。

我需要使用宏VBA将表格数据从Word文档复制到Excel工作表。

我需要在特定文件夹中的许多版本的文档中执行文档V1.2版本。例如:我有文件"C:\Test\FirstDocV1.1.doc""C:\Test\FirstDocV1.2.doc"

我只想"C:\Test\FirstDocV1.2.doc"执行并获取表数据。无论如何,我都尝试过,但它的意思是“没有桌子”。

请参阅下面的代码。

Sub importTableDataWord()
    Dim WdApp As Object, wddoc As Object
    Dim strDocName As String

    On Error Resume Next
    Set WdApp = GetObject(, "Word Application")

    If Err.Number = 429 Then
       Err.Clear
        Set WdApp = CreateObject("Word Application")
    End If

    WdApp.Visible = True
    strDocName = "C:\Test\FirstDocV1.2.doc"

'I am manually giving for version 1.2 doc. But I need to select which contains v1.2 version automatically from Test folder.    
    If Dir(strDocName) = "" Then
        MsgBox "The file is not present" & strDocName & vbCrLf & " or was not found"
        Exit Sub
    End If

    WdApp.Activate
    Set wddoc = WdApp.Documents(strDocName)

    If wddoc Is Nothing Then Set wddoc = WdApp.Documents.Open(strDocName)
        wddoc.Activate
        Dim Tble As Integer
        Dim rowWd As Long
        Dim colWd As Long
        Dim x As Long, y As Long

        x = 1
        y = 1

        With wddoc
            Tble = wddoc.tables.Count
            If Tble = 0 Then
                MsgBox "No Tables Found in the document"
                Exit Sub
            End If

            For i = 1 To Tble
                With .tables(i)
                    For rowWd = 1 To .Rows.Count
                        For colWd = 1 To .Columns.Count
                            Cells(x, y) = WorksheetFunction.Clean(.cell(rowWd, colWd).Range.Text)
                            y = y + 1
                        Next colWd
                        y = 1
                        x = x + 1
                    Next rowWd
                End With
            Next
        End With

    wddoc.Close savechanges:=False
    WdApp.Quit

    Set wddoc = Nothing
    Set WdApp = Nothing
End Sub

谁能帮我。

唐·杰维特(Don Jewett)

您未看到的代码有很多问题,因为错误处理对您而言效果不佳。我已经在下面更正了它们。On Error Resume Next并不能很好地揭示问题,因为当发生错误时,代码将一直向前运行。在编写例程时,您想通过捕获其中的大多数来纠正这些问题。

在进行编辑之前,我做了一些您应该养成的习惯:

  1. 添加了Option Explict(这将使您难以在代码中引入错误,因为它需要显式的语法。这是一门很好的纪律,我对此并不鼓励)
  2. 已编译(在编写代码时定期执行此操作。它将帮助您解决整个过程中的问题)
  3. 声明变量i当我使用Option Explicit进行编译时,这已标记出来(这不会在代码中造成问题,但是如果您不使用显式变量,则很容易引入错误)

然后我更改为使用特定的对象引用

  1. 设置对Word库的引用(这使调试方式更容易,因为您将在编辑器中拥有intellisense,并且可以使用[F2]浏览Word库)
  2. 更新了对Word.Application和Word.Document的通用对象引用

设置对Word库的引用

然后,我修复了错误。

首先,我将错误处理更改为使用On Error GoTo,然后解决了在处理代码时发生的每个错误。

  1. wdApp.Activate导致错误
  2. wdDoc从未真正创建过,所以没什么

更正这些错误之后,我添加了一行以获取名称中带有“ V1.2.doc”的文档。

最后,我删除了循环,因此仅将第一个表复制为所请求的问题。

Option Explicit

Public Sub ImportTableDataWord()
    Const FOLDER_PATH As String = "C:\Test\"

    Dim sFile As String

    'use the * wildcard to select the first file ending with "V1.2.doc" 
    sFile = Dir(FOLDER_PATH & "*V1.2.doc")

    If sFile = "" Then
        MsgBox "The file is not present or was not found"
        Exit Sub
    End If

    ImportTableDataWordDoc FOLDER_PATH & sFile

End Sub

Public Sub ImportTableDataWordDoc(ByVal strDocName As String)

    Dim WdApp As Word.Application
    Dim wddoc As Word.Document
    Dim nCount As Integer
    Dim rowWd As Long
    Dim colWd As Long
    Dim x As Long
    Dim y As Long
    Dim i As Long

    On Error GoTo EH

    If strDocName = "" Then
        MsgBox "The file is not present or was not found"
        GoTo FINISH
    End If

    Set WdApp = New Word.Application
    WdApp.Visible = False

    Set wddoc = WdApp.Documents.Open(strDocName)

    If wddoc Is Nothing Then
        MsgBox "No document object"
        GoTo FINISH
    End If

    x = 1
    y = 1

    With wddoc

        If .Tables.Count = 0 Then
            MsgBox "No Tables Found in the document"
            GoTo FINISH
        Else

            With .Tables(1)
                For rowWd = 1 To .Rows.Count
                    For colWd = 1 To .Columns.Count
                        Cells(x, y) = WorksheetFunction.Clean(.Cell(rowWd, colWd).Range.Text)
                        y = y + 1
                    Next 'colWd
                    y = 1
                    x = x + 1
                Next 'rowWd
            End With

        End If

    End With

    GoTo FINISH

EH:

    With Err
        MsgBox "Number" & vbTab & .Number & vbCrLf _
            & "Source" & vbTab & .Source & vbCrLf _
            & .Description
    End With

    'for debugging purposes
    Debug.Assert 0
    GoTo FINISH
    Resume

FINISH:

    On Error Resume Next
    'release resources

    If Not wddoc Is Nothing Then
        wddoc.Close savechanges:=False
        Set wddoc = Nothing
    End If

    If Not WdApp Is Nothing Then
        WdApp.Quit savechanges:=False
        Set WdApp = Nothing
    End If

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Java将数据从一个表复制到另一个表,然后在第一个表中删除该数据?

Excel VBA宏,复制行中的第一个值

Excel宏:根据条件将行值从一个工作表复制到另一工作表中的特定位置

Apollo将第一个结果复制到边缘阵列中的每个节点

将Word文档的内容从excel VBA复制到新创建的Word文档

使用Python将整个Word文档(包括表格)复制到另一个文档中

如何使用vba将一个Word文档的内容复制到另一个Word文档的末尾?

我正在尝试创建一个VBA宏,该宏可以复制工作表,然后将工作表中的数据复制到新列中

选择一个表以从Word文件复制到Excel文件

将数据行复制到Excel中的另一个工作表并添加列VBA

将一个Excel工作表中的命名范围复制到另一工作表中的命名范围

Excel VBA-根据数组匹配将整个行复制到另一个工作表

将粘贴数据复制到第一个空行VBA中

excel VBA,在将多个CSV文件复制到一个工作簿中的单元格中创建带有工作表或文件名的列

通过VBA将Excel数据复制到格式化的Word表中?

将数据从excel复制到pdf格式,但第一个可用

如何使用Excel VBA将一个图像复制到另一个图像

如何将一个Word文档的内容复制到另一个Word文档中?

将行从1个Excel工作表复制到另一个

需要根据第一库仑值将数据范围从一个Excel工作表复制到另一个工作表

Excel VBA-将范围从一个工作表粘贴复制到工作簿中的某些工作表之后的所有工作表

Excel VBA宏将多个excel中使用的单元格复制到一个excel中

Excel VBA - 使用宏将工作簿复制到新工作簿中

Excel:使用 VBA 将行复制到另一个工作表中的表格

将多个工作表中的范围复制到一个工作表中,在第一个空单元格中

将 WCHAR* 中的第一个字符复制到 LPWCSTR

使用VBA将多行从一个excel文件复制到另一个

将文件夹中的 Excel 文件复制到一个 Excel 文件中

Excel VBA 复制到另一个工作表时跳过空白