vba删除word表中的特定行和列
我需要解析大多数word文档表并删除包含字符串“Deleted”的单元格。这些表有不同的格式,因此我需要根据格式更改开始索引。我编写了一个代码,首先删除所有包含“已删除”字符串的单元格中的行。相同的策略用于删除列。它适用于行,但不适用于列删除。当运行表格单元格时,由于删除了列,列索引大于实际可用列。我不知道为什么它出现在列删除部分而不是行删除部分。下面的代码适用于某些表,但不是所有表vba删除word表中的特定行和列,vba,excel,ms-word,Vba,Excel,Ms Word,我需要解析大多数word文档表并删除包含字符串“Deleted”的单元格。这些表有不同的格式,因此我需要根据格式更改开始索引。我编写了一个代码,首先删除所有包含“已删除”字符串的单元格中的行。相同的策略用于删除列。它适用于行,但不适用于列删除。当运行表格单元格时,由于删除了列,列索引大于实际可用列。我不知道为什么它出现在列删除部分而不是行删除部分。下面的代码适用于某些表,但不是所有表 Dim msWord As Word.Application
Dim msWord As Word.Application
Dim myDoc As Word.Document
Dim wordTable As Table
Dim r As Long
Dim c As Long
Dim col_del_cnt As Long
Dim row_del_cnt As Long
Dim i As Long
Dim col_index As Long
Dim param As Long
Dim Tbl As Table
Dim Tmpfile As String
Tmpfile = ThisWorkbook.Path & "\Template.docx"
With msWord
.Visible = True
Set myDoc = .Documents.Open(Filename:=Tmpfile)
End With
With myDoc
For i = 7 To 21
Set wordTable = .Tables(i)
If wordTable.Columns.Count < 2 Then
col_index = 1
param = wordTable.Columns.Count
Else
col_index = 2
param = wordTable.Columns.Count - 1
End If
For r = 2 To wordTable.Rows.Count
col_del_cnt = 0
For c = col_index To wordTable.Columns.Count
If InStr(1, wordTable.Cell(r, c).Range.Text, "Deleted", 1) Then
col_del_cnt = col_del_cnt + 1
End If
Next c
If col_del_cnt = param Then
If r > wordTable.Rows.Count Then
wordTable.Rows(wordTable.Rows.Count).Delete
Else
wordTable.Rows(r).Delete
End If
End If
Next r
Next
End With
With myDoc
For i = 7 To 21
Set wordTable = .Tables(i)
If wordTable.Columns.Count < 2 Then
col_index = 1
Else
col_index = 2
End If
For c = col_index To wordTable.Columns.Count
row_del_cnt = 0
For r = 2 To wordTable.Rows.Count
If InStr(1, wordTable.Cell(r, c).Range.Text, "Deleted", 1) Then '\Error located here'
row_del_cnt = row_del_cnt + 1
End If
Next r
If row_del_cnt = wordTable.Rows.Count - 1 Then
If c > wordTable.Columns.Count Then
wordTable.Columns(wordTable.Columns.Count).Delete
Else
wordTable.Columns(c).Delete
End If
End If
Next c
Next
End With
Dim msWord作为Word.Application
将myDoc设置为Word.Document
Dim wordTable As Table
变暗,变长
尺寸c与长度相同
颜色与长度相同
变暗行的长度相同
我想我会坚持多久
Dim col_索引与长
暗参数与长参数相同
如表所示的尺寸Tbl
将Tmpfile设置为字符串
Tmpfile=thispoolk.Path&“\Template.docx”
用msWord
.Visible=True
设置myDoc=.Documents.Open(文件名:=Tmpfile)
以
用myDoc
对于i=7到21
Set wordTable=.Tables(一)
如果wordTable.Columns.Count小于2,则
col_指数=1
param=wordTable.Columns.Count
其他的
col_指数=2
param=wordTable.Columns.Count-1
如果结束
对于r=2的wordTable.Rows.Count
col_del_cnt=0
对于c=col_,索引为wordTable.Columns.Count
如果InStr(1,wordTable.Cell(r,c).Range.Text,“已删除”,1),则
col_del_cnt=col_del_cnt+1
如果结束
下一个c
如果col_del_cnt=param,则
如果r>wordTable.Rows.Count,则
wordTable.Rows(wordTable.Rows.Count).删除
其他的
wordTable.Rows(r).删除
如果结束
如果结束
下一个r
下一个
以
用myDoc
对于i=7到21
Set wordTable=.Tables(一)
如果wordTable.Columns.Count小于2,则
col_指数=1
其他的
col_指数=2
如果结束
对于c=col_,索引为wordTable.Columns.Count
行删除内容=0
对于r=2的wordTable.Rows.Count
如果InStr(1,wordTable.Cell(r,c).Range.Text,“已删除”,1),则“\Error located here”
行删除cnt=行删除cnt+1
如果结束
下一个r
如果row_del_cnt=wordTable.Rows.Count-1,则
如果c>wordTable.Columns.Count,则
wordTable.Columns(wordTable.Columns.Count).删除
其他的
wordTable.Columns(c).删除
如果结束
如果结束
下一个c
下一个
以
我希望有人能帮我找到解决办法 删除索引的内容时,必须向后执行 更改
对于i=7到21
到
对于i=21到7步骤-1
以此类推。删除索引的内容时,必须向后执行 更改
对于i=7到21
到
对于i=21到7步骤-1
依此类推。当某个单元格已“删除”该行和该列时,您似乎正在尝试同时删除该行和该列。显然,如果使用一个循环删除其中已“删除”的行,然后使用第二个循环删除其中已“删除”的列,则第二个循环将找不到任何内容。尝试以下内容:
Dim t As Long, r As Long, c As Long, ArrCols() As String
With myDoc
For t = 21 To 7 Step -1
With .Tables(t)
If InStr(1, .Range.Text, "Deleted", 1) Then
ReDim ArrCols(.Columns.Count)
For r = .Rows.Count To 1 Step -1
With .Rows(r)
If InStr(1, .Range.Text, "Deleted", 1) Then
For c = 1 To .Cells.Count
If InStr(1, .Cells(c).Range.Text, "Deleted", 1) Then
ArrCols(c) = c
End If
Next
.Delete
End If
End With
Next r
For c = UBound(ArrCols) To 1 Step -1
If ArrCols(c) <> "" Then .Columns(c).Delete
Next
End If
End With
Next
End With
Dim t为长,r为长,c为长,ArrCols()为字符串
用myDoc
对于t=21至7,步骤-1
附.表格(t)
如果InStr(1、.Range.Text,“已删除”,1),则
ReDim ArrCols(.Columns.Count)
对于r=.Rows.Count,将其设置为1步骤-1
带.Rows(r)
如果InStr(1、.Range.Text,“已删除”,1),则
对于c=1到.Cells.Count
如果InStr(1、.Cells(c).Range.Text,“已删除”,1)则
ArrCols(c)=c
如果结束
下一个
.删除
如果结束
以
下一个r
对于c=UBound(ArrCols)到1步骤-1
如果ArrCols(c)“,.Columns(c).Delete
下一个
如果结束
以
下一个
以
注意所有涉及删除的循环是如何向后运行的
事实上,您自己的代码在删除行时没有抛出错误,这只是巧合。当单元格“删除”行和列时,您似乎正在尝试同时删除行和列。显然,如果使用一个循环删除其中已“删除”的行,然后使用第二个循环删除其中已“删除”的列,则第二个循环将找不到任何内容。尝试以下内容:
Dim t As Long, r As Long, c As Long, ArrCols() As String
With myDoc
For t = 21 To 7 Step -1
With .Tables(t)
If InStr(1, .Range.Text, "Deleted", 1) Then
ReDim ArrCols(.Columns.Count)
For r = .Rows.Count To 1 Step -1
With .Rows(r)
If InStr(1, .Range.Text, "Deleted", 1) Then
For c = 1 To .Cells.Count
If InStr(1, .Cells(c).Range.Text, "Deleted", 1) Then
ArrCols(c) = c
End If
Next
.Delete
End If
End With
Next r
For c = UBound(ArrCols) To 1 Step -1
If ArrCols(c) <> "" Then .Columns(c).Delete
Next
End If
End With
Next
End With
Dim t为长,r为长,c为长,ArrCols()为字符串
用myDoc
对于t=21至7,步骤-1
附.表格(t)
如果InStr(1、.Range.Text,“已删除”,1),则
ReDim ArrCols(.Columns.Count)
对于r=.Rows.Count,将其设置为1步骤-1
带.Rows(r)
如果InStr(1、.Range.Text,“已删除”,1),则
对于c=1到.Cells.Count
如果InStr(1、.Cells(c).Range.Text,“已删除”,1)则
ArrCols(c)=c
如果结束
下一个
.删除
如果结束
以
下一个r
对于c=UBound(ArrCols)到1步骤-1
如果ArrCols(c)“,.Columns(c).Delete
下一个
如果结束
以
下一个
以
注意所有涉及删除的循环是如何向后运行的
事实上,您自己的代码在删除行时没有抛出错误只是巧合。即使我将i设置为常量,我也得到了错误,因此我认为它与for循环索引无关。即使我将i设置为常量,我也得到了错误,因此我认为它与for循环索引无关。