仅将最后一行数据从Excel复制到Word
我正在尝试编写一个代码,只将电子表格中的最后一行数据复制到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 =
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等