【发布时间】:2017-06-26 12:48:03
【问题描述】:
我目前正在做一个项目,正在寻求帮助。为了让你们了解正在发生的事情,我将逐步介绍该场景。
1) 目前我有一个名为“AnimalNamesToRemove”的字符串数组(在本例中,该数组包含以下单词),其中包含用作 word 文档中书签的单词,我希望从单词表中删除这些单词参考如下:
AnimalNamesToRemove
动物猫、动物狗、动物鸟
2) 除了数组之外,word 文档中还有一个表格,其中第一列有动物的名字,以及关于动物的一些信息(唯一重要的信息是动物的名字)动物):
单词表
3) 对于这种情况,我有一个 excel 表,我希望用它来引用数组中的单词和单词表名称,因为正在使用的 word 文档中已经有书签,其中包含存在的名称数组。为了将这些结合在一起,存在一个包含书签名称和实际动物名称的两列 Excel 电子表格(第二列使用名为“myRangeRef”的范围引用):
电子表格
4) 我要做的是,对于上述数组中的每个值,如果在电子表格表(即第二列“书签参考”)中找到该值(例如“AnimalDog”),则偏移到第一列中它旁边的相应单元格(即“Dog”)并使用这些值创建一个新的逗号分隔字符串,与“AnimalNamesToRemove”(即Cat,Dog,Bird)相同,然后将其转换为名为“ AnimalsToDelete”。一旦创建了数组,并且在第一列中选择了所有值并根据第二列中的引用制作了一个数组,我想在单词表中逐行查找新数组中存在的每个值“AnimalsToDelete”,如果该值(即 Cat、Dog 和 Bird)存在于单词表中(在第一列中找到),我希望代码删除找到名称的整行(见下图)
示例结果
Dim wdTable As Object
Dim myRangeRef As Range
Dim AnimalNamesToRemove As Variant
Dim AnimalsToDelete As Variant
Dim wdDoc As Object
Set myRangeRef = ThisWorkbook.Sheets("Bookmark References").Range("B1:B6")
Set wdTable = wdDoc.Tables(1)
For i = LBound(AnimalNamesToRemove) To UBound(AnimalNamesToRemove)
For Each cell In myRangeRef
If InStr(1, cell.Value, AnimalNamesToRemove(i), vbTextCompare) Then
aCell = cell.Offset(, -1).Value
stTemp = stTemp & "," & aCell
End If
Next cell
Next i
stTemp = Mid(stTemp, 2)
If Not Len(Trim(stTemp)) = 0 Then
AnimalsToDelete = Split(stTemp, ",")
For i = LBound(AnimalsToDelete) To UBound(AnimalsToDelete)
For j = wdTable.Rows.Count To 2 Step -1
If wdTable.cell(j, 1).Range.Text = AnimalsToDelete(i) Then wdTable.Rows(j).Delete
Next j
Next i
End If
如果您有任何解决方案和/或建议,请在下方发表评论。
注意:第一部分代码用于创建字符串数组(即从“set wdTable =”到“next i”),它从我的单词表中删除信息'我有问题。 最好的,
杰克·亨德森
【问题讨论】:
-
您能否附上一张输出应该是什么样子的图片?这似乎很有趣且可行。
-
是的,给我一分钟更新@Vityata
-
当您的所有关键字都是通用关键字或只是“x”时,您的示例很难遵循
-
@dwirony 请看修改后的问题,希望这能让事情更清楚。
标签: vba excel excel-2010 excel-2007