Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅将最后一行数据从Excel复制到Word_Excel_Vba - Fatal编程技术网

仅将最后一行数据从Excel复制到Word

仅将最后一行数据从Excel复制到Word,excel,vba,Excel,Vba,我正在尝试编写一个代码,只将电子表格中的最后一行数据复制到Word文档中的书签。这一切都非常有效,除了我无法确定如何只让它选择最后一行之外——在For I=74 to r下面的代码中,它被手动设置为最后一行(74),以便在我测试时获取数据 Dim objWord Dim objDoc Dim objRange Set objWord = CreateObject("Word.Application") objWord.Visible = True r =

我正在尝试编写一个代码,只将电子表格中的最后一行数据复制到Word文档中的书签。这一切都非常有效,除了我无法确定如何只让它选择最后一行之外——在
For I=74 to r
下面的代码中,它被手动设置为最后一行(74),以便在我测试时获取数据


   Dim objWord
   Dim objDoc
   Dim objRange

   Set objWord = CreateObject("Word.Application")

   objWord.Visible = True


r = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 74 To r
        With Cells(i, 5)
           If .Value = "Mobile Plant" Then
                Set objDoc = objWord.Documents.Add(Template:="S:\......docx", NewTemplate:=False, DocumentType:=0)

    Set objRange = objDoc.Bookmarks("LicenceNo").Range
    objRange.InsertAfter Cells(i, 4)

    Set objRange = objDoc.Bookmarks("Date").Range
    objRange.InsertDateTime DateTimeFormat:="d/M/yyyy"

    Set objRange = objDoc.Bookmarks("Name").Range
    objRange.InsertAfter Cells(i, 7)

    Set objRange = objDoc.Bookmarks("Company").Range
    objRange.InsertAfter Cells(i, 6)

    Set objRange = objDoc.Bookmarks("Location").Range
    objRange.InsertAfter Cells(i, 11)

    Set objRange = objDoc.Bookmarks("Location2").Range
    objRange.InsertAfter Cells(i, 10)

    Set objRange = objDoc.Bookmarks("From").Range
    objRange.InsertAfter Cells(i, 16)

    Set objRange = objDoc.Bookmarks("To").Range
    objRange.InsertAfter Cells(i, 17)

    Set objRange = objDoc.Bookmarks("Date2").Range
    objRange.InsertDateTime DateTimeFormat:="d/M/yyyy"

        End If
        End With

    Next i

    End Sub

以下内容将返回工作表中最后使用的行索引:

Set Sheet = ActiveSheet
LastRowIndex = Sheet.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

以下内容将返回工作表中最后使用的行索引:

Set Sheet = ActiveSheet
LastRowIndex = Sheet.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

在一个完整的对话框之后,我们终于能够解释您无法使用上述代码获取最后一行的主要原因。当您有一个表时,该代码将返回表中的最后一行,因为它包含一个表

我们必须以不同的方式在表的相应列中搜索:

Sub Test()

Dim objWord, objDoc, objRange, i As Long

'Change both sheet and tables names accordingly
'Also I assume the last row of the first column of the table is same for Col. E
With ThisWorkbook.Sheets("Licences").ListObjects("Table1").ListColumns(1).Range
    i = .Find(What:="*", _
          After:=.Cells(1), _
          LookIn:=xlFormulas, _
          SearchOrder:=xlByRows, _
          SearchDirection:=xlPrevious, _
          MatchCase:=False).Row

    If .Cells(i, 5).Value = "Mobile Plant" Then
        Set objWord = CreateObject("Word.Application")
        objWord.Visible = True
        Set objDoc = objWord.Documents.Add(Template:="S:\......docx", NewTemplate:=False, DocumentType:=0)
        Set objRange = objDoc.Bookmarks("LicenceNo").Range
        objRange.InsertAfter .Cells(i, 4)

        Set objRange = objDoc.Bookmarks("Date").Range
        objRange.InsertDateTime DateTimeFormat:="d/M/yyyy"

        Set objRange = objDoc.Bookmarks("Name").Range
        objRange.InsertAfter .Cells(i, 7)

        Set objRange = objDoc.Bookmarks("Company").Range
        objRange.InsertAfter .Cells(i, 6)

        Set objRange = objDoc.Bookmarks("Location").Range
        objRange.InsertAfter .Cells(i, 11)

        Set objRange = objDoc.Bookmarks("Location2").Range
        objRange.InsertAfter .Cells(i, 10)

        Set objRange = objDoc.Bookmarks("From").Range
        objRange.InsertAfter .Cells(i, 16)

        Set objRange = objDoc.Bookmarks("To").Range
        objRange.InsertAfter .Cells(i, 17)

        Set objRange = objDoc.Bookmarks("Date2").Range
        objRange.InsertDateTime DateTimeFormat:="d/M/yyyy"
    End If
End With

End Sub

在一个完整的对话框之后,我们终于能够解释您无法使用上述代码获取最后一行的主要原因。当您有一个表时,该代码将返回表中的最后一行,因为它包含一个表

我们必须以不同的方式在表的相应列中搜索:

Sub Test()

Dim objWord, objDoc, objRange, i As Long

'Change both sheet and tables names accordingly
'Also I assume the last row of the first column of the table is same for Col. E
With ThisWorkbook.Sheets("Licences").ListObjects("Table1").ListColumns(1).Range
    i = .Find(What:="*", _
          After:=.Cells(1), _
          LookIn:=xlFormulas, _
          SearchOrder:=xlByRows, _
          SearchDirection:=xlPrevious, _
          MatchCase:=False).Row

    If .Cells(i, 5).Value = "Mobile Plant" Then
        Set objWord = CreateObject("Word.Application")
        objWord.Visible = True
        Set objDoc = objWord.Documents.Add(Template:="S:\......docx", NewTemplate:=False, DocumentType:=0)
        Set objRange = objDoc.Bookmarks("LicenceNo").Range
        objRange.InsertAfter .Cells(i, 4)

        Set objRange = objDoc.Bookmarks("Date").Range
        objRange.InsertDateTime DateTimeFormat:="d/M/yyyy"

        Set objRange = objDoc.Bookmarks("Name").Range
        objRange.InsertAfter .Cells(i, 7)

        Set objRange = objDoc.Bookmarks("Company").Range
        objRange.InsertAfter .Cells(i, 6)

        Set objRange = objDoc.Bookmarks("Location").Range
        objRange.InsertAfter .Cells(i, 11)

        Set objRange = objDoc.Bookmarks("Location2").Range
        objRange.InsertAfter .Cells(i, 10)

        Set objRange = objDoc.Bookmarks("From").Range
        objRange.InsertAfter .Cells(i, 16)

        Set objRange = objDoc.Bookmarks("To").Range
        objRange.InsertAfter .Cells(i, 17)

        Set objRange = objDoc.Bookmarks("Date2").Range
        objRange.InsertDateTime DateTimeFormat:="d/M/yyyy"
    End If
End With

End Sub

如果您只想要最后一行,为什么要使用for循环?我已经修改了以前在其他电子表格中使用的代码,我会在继续的过程中继续使用这些代码,所以我坚持使用我的工作方式。@AAA我只是尝试了一下,但仍然没有将其修改为“Table5”(表名)。我也试着把它改为从E(5)列开始,什么都没有。问题是什么?当你一步一步通过它时,i的值是多少?@AAA和以前一样,值是1003,不会打开任何东西-如果我将其从列E(5)开始更改,它将更改为74,这是实际的最后一行,但即使单元格值为“Mobile Plant”,它也不会打开Word etcIf,你只需要最后一行,为什么要使用for循环?我已经修改了以前在其他电子表格中使用的代码,我会在继续的过程中继续使用这些代码,所以我坚持使用我的工作方法。@AAA我只是尝试了一下,但仍然没有将其修改为“Table5”(表名)。我也试着把它改为从E(5)列开始,什么都没有。问题是什么?当你逐行查看时,i的值是多少?@AAA与之前一样,该值是1003,不会打开任何内容-如果我将其更改为从列E(5)开始,它将更改为74,这是实际的最后一行,但即使单元格值为“Mobile Plant”,它也不会打开Word等