gpt4 book ai didi

excel - 从 Excel 到 Word 表格中的特定单元格

转载 作者:行者123 更新时间:2023-12-02 22:26:27 25 4
gpt4 key购买 nike

我已经看到一些有关从 Excel 在 Word 中创建表格的问题的答案,但它们并不完全符合我的要求。我有一张 Excel 表,其中包含设备的详细信息(公司编号、序列号、制造商、描述和型号)。该文件目前有17114行设备数据。我有一个包含四列的 Word 文档(数量、公司编号、零件编号、描述)。

现在在 Excel 上,我有一个按钮可以打开单词文档,另一个按钮可以打开用户表单。用户表单有一个组合框和一个文 native 器人。组合框选择要在 Excel 中搜索的列。文本框是用户要查找的内容。其代码如下

Dim myLastRow As Long
Dim myResult As Long
Dim myTableRange As Range

myLastRow = Cells(Rows.Count, 1).End(xlUp).Row

If ComboBox1.Value = "Serial" Then
Set myTableRange = Range("B1:B" & myLastRow)
myResult = Application.Match(TextBox1.Value, myTableRange, 0) 'Returns row number only
Range("B" & myVLookupResult).Activate
ElseIf ComboBox1.Value = "MII" Then
Set myTableRange = Range("A1:A" & myLastRow)
myResult = Application.Match(TextBox1.Value, myTableRange, 0) 'Returns row number only
Range("A" & myResult).Activate
Else
MsgBox ("No Range Selected")
End If

其中“MII”是公司编号。该代码放置在命令按钮上。从这里我希望宏将数据从 myResult 复制到 word。要复制的单元格是

   Cells(myResult, 1) 

到word中的第二列;

    Cells (myResult, 2)

到word中的第三列;和

    Cells(myResult, 3) & ", " & Cells(myResult, 4) & ", Model #" & Cells(myResult, 5)

到word中的第四列。我也在寻找单词来检查第一个空白行的位置(标题之后)并将其插入那里。如果页脚(也是表格的一部分)之前没有空白行,则添加一行。

我可以放置数据的默认行数是 16。标题有 13 行(标题是表的一部分)。总共 19 行将创建第二页,但第二页上没有任何数据单元格(仅页眉和页脚)。直到制作完 28 行后,数据单元格才开始在第 2 页上弹出。

我的问题是如何在 Word 中引用表格中的特定单元格?我可以使用与在 Excel 中相同的代码来查找标题后的第一个空白单元格吗?用于向表中添加行并计算可用行以确保我在正确的页面上输入的代码是否也相同?

现在,我对宏的单词部分所做的一切就是调用文档。

    Dim objWord, objDoc As Object
Set objWord = GetObject(, "Word.Application")
objWord.Visible = True

我知道我可以使用类似于下面的东西,但没有指定将数据放在哪里。

    Sheets(1).Range(FirstCell, LastCell).Copy
objWord.Selection.Paste
objWord.Selection.TypeParagraph

最佳答案

我还没弄清楚如何自动添加行。我不断收到运行时错误“5991”:无法访问此集合中的各个行,因为表具有垂直合并的单元格。 (编辑:我发现我没有单击 Microsoft Word 对象库引用。完成此操作后,此问题的其他答案起作用了。)

由于我所做的对我来说仍然节省了相当多的时间,并且可能会帮助其他人尝试做同样的事情,所以我将发布到目前为止我所拥有的内容。注意:其中仍然有一些未使用的代码,用于尝试一些东西以查看它是否有效。

 Dim myLastRow As Long
Dim myResult As Long
Dim myTableRange As Range

myLastRow = Cells(Rows.Count, 1).End(xlUp).Row

If ComboBox1.Value = "Serial" Then
Set myTableRange = Range("B1:B" & myLastRow)
myResult = Application.Match(TextBox1.Value, myTableRange, 0) 'Returns row number only
ElseIf ComboBox1.Value = "MII" Then
Set myTableRange = Range("A1:A" & myLastRow)
myResult = Application.Match(TextBox1.Value, myTableRange, 0) 'Returns row number only
Else
MsgBox ("No Range Selected")
End If

Dim objWord, objDoc As Object
Set objWord = GetObject(, "Word.Application")
objWord.Visible = True

Dim tableRow As Long
Dim rowCount As Long
Dim lastTableCell As Long
Dim i As Long
Dim cellEmpty As Boolean

'lastTableCell = 28 'Defualt input range is from cell 13 to 28
lastTableCell = 100
cellEmpty = True

findEmptyCell:
For i = 13 To lastTableCell
If objWord.ActiveDocument.Tables(1).Cell(i, Column:=1).Range.Text = Chr(13) & Chr(7) Then
tableRow = i
cellEmpty = True
GoTo rowFound
End If

allCellsFilled:
If cellEmpty = False Then
objWord.ActiveDocument.Tables.Item(1).Rows(i - 1).Select
Selection.InsertRowsBelow (i - 1)
cellEmpty = True
GoTo findEmptyCell
End If
Next i

rowFound:
On Error GoTo errorHappened
objWord.ActiveDocument.Tables(1).Cell(Row:=tableRow, Column:=1).Range.Text = "1"
objWord.ActiveDocument.Tables(1).Cell(Row:=tableRow, Column:=2).Range.Text = Cells(myResult, 1).Value
objWord.ActiveDocument.Tables(1).Cell(Row:=tableRow, Column:=3).Range.Text = Cells(myResult, 2).Value
objWord.ActiveDocument.Tables(1).Cell(Row:=tableRow, Column:=4).Range.Text = Cells(myResult, 3).Value & ", " & Cells(myResult, 4).Value & ", Model # " & Cells(myResult, 5).Value
GoTo endTheSub

errorHappened:
cellEmpty = False
GoTo allCellsFilled

endTheSub:

End Sub

关于excel - 从 Excel 到 Word 表格中的特定单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53120300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com