我目前正在开发一个项目并正在寻找一些帮助。为了让大家了解正在发生的事情,我将一步一步地通过场景。使用Excel VBA从Word表格的单元格中删除内容
1)目前我有一个名为“AnimalNamesToRemove”的字符串数组(这个例子中的数组包含下面的单词),它包含在单词文档中用作书签的单词,我希望删除单词下面的表中引用:
AnimalNamesToRemove
AnimalCat,AnimalDog,AnimalBird
2)除了阵列,字文档中的表中存在一列中具有动物的名称,以及一些信息a布特的动物(即重要的唯一信息是动物的名字):
Word表格
3)对于这种情况,我有我的Excel表格希望用于引用数组中的单词和单词表名称,因为正在使用的单词文档中已有书签,用于保存数组中存在的名称。为了把这些结合在一起,两列excel表格存在具有书签和实际的动物名称的名称(列二是使用名为“myRangeRef”的范围内引用):
电子表格
4)我想要做的是,对于上面列出的数组中的每个值,如果在电子表格中找到该值(例如“AnimalDog”)(即第2列“书签参考”),则偏移到在第一列中它旁边的相应单元格(即“Dog”)并创建一个新的以逗号分隔的字符串,这些值相同作为“AnimalNamesToRemove”(即,猫,狗,鸟),然后将它变成一个名为“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
如果您有任何解决方案和/或建议,请在下面评论它们。
注:的第一部分代码适用于创建字符串数组(即从“设置wdTable =”到“下一个我”),它从我有问题的字表中去除的信息用。 最佳,
杰克·亨德森
你能包括输出应该是什么样子的图片?这似乎很有趣,也是可行的。 – Vityata
是的,给我一分钟更新@Vityata –
当你的所有关键字是通用的或只是“x” – dwirony