需求场景:
word文档中有多个表格;
每个表格中的起始井号和终止井号的内容通过#拼接起来;
拼接内容与excel 里A列的值进行匹配;
匹配成功则将excel对应行的其他列内容写入word文档表格里和表头一致的区域。
看图片说明
直接上VBA代码:
Private Sub CommandButton1_Click()
全局地址 = App
If 全局地址 = False Then Exit Sub
'建立一个字典对象
Set pDicX = CreateObject("Scripting.Dictionary")
'设定字典的键为sheet1表的行号,字典的值为(A+行号)单元格的内容
For ii1 = 2 To Sheet1.Range("a1048576").End(-4162).Row
a = Sheet1.Range("a" & ii1)
pDicX.Item(CStr(a)) = ii1
Next
Dim ok As Boolean
ok = False
'清空sheet2表
Sheet2.Range("a2:b65535") = ""
Set myword = CreateObject("word.application")
myword.Visible = False
Set doc = myword.Documents.Open(全局地址) '打开文件
Dim st As String
'遍历word文档中的所有表格
For ii1 = 1 To doc.Tables.Count
'word表格中的第二行第4、6列替换特殊字符并用#拼接起来
a = VBA.Replace(doc.Tables(ii1).Cell(2, 4).Range.Text, "", "") & "#" & VBA.Replace(doc.Tables(ii1).Cell(2, 6).Range.Text, "", "")
'替换换行符
a = VBA.Replace(a, Chr(10), "")
a = VBA.Replace(a, Chr(13), "")
'设定word文档当前循环表格第一行第2列的内容为当前循环数
doc.Tables(ii1).Cell(1, 2) = ii1
'word文档当前循环表格第3行第2列的内容进行替换
doc.Tables(ii1).Cell(3, 2) = VBA.Replace(doc.Tables(ii1).Cell(3, 2).Range.Text, "-", "/")
'将a转为字符串,并提取字典键值
zhi = pDicX.Item(CStr(a))
'如果键值不为空
If zhi <> "" Then
'将Sheet表同一行 B C D 列单元格的值写入到word表格的相同行的不同单元格
doc.Tables(ii1).Cell(4, 2) = Sheet1.Range("b" & zhi)
doc.Tables(ii1).Cell(4, 4) = Sheet1.Range("c" & zhi)
doc.Tables(ii1).Cell(4, 6) = Sheet1.Range("d" & zhi) & "mm"
'下面是不同情况的对应处理,需要根据具体业务来理解
If Val(Sheet1.Range("e" & zhi)) = 0 Then
doc.Tables(ii1).Cell(3, 4) = "/"
Else
doc.Tables(ii1).Cell(3, 4) = Sheet1.Range("e" & zhi) & "m"
End If
If Val(Sheet1.Range("f" & zhi)) = 0 Then
doc.Tables(ii1).Cell(3, 6) = "/"
Else
doc.Tables(ii1).Cell(3, 6) = Sheet1.Range("f" & zhi) & "m"
End If
doc.Tables(ii1).Cell(5, 4) = Sheet1.Range("g" & zhi) & "m"
doc.Tables(ii1).Cell(5, 6) = Sheet1.Range("h" & zhi) & "m"
doc.Tables(ii1).Cell(6, 2) = Sheet1.Range("i" & zhi)
doc.Tables(ii1).Cell(1, 4) = Sheet1.Range("j" & zhi)
Else
HL = Sheet2.Range("b65535").End(-4162).Row
Sheet2.Range("a" & HL + 1) = "段号未找到"
Sheet2.Range("b" & HL + 1) = a
ok = True
End If
Next
If ok = True Then
Sheet2.Activate
MsgBox "出现错误请检查"
End If
myword.Visible = True
End Sub
测试的两个文档(包含完整VBA)下载
链接:
https://pan.baidu.com/s/1j7xKTJqL_dktBX9Q33NwzQ
提取码
内容隐藏,评论后刷新可见


想看看进行学习