如何将格式应用于VBA宏(Word)中的非连续单元格范围?
我需要在MS Word文档中表格的矩形区域上执行一些简单任务。比如说,它包含10列20行。例如,我需要将文本居中放置在从第2列第3行到第8列第18行的单元格中。我试图得到一个从指定位置开始和结束的范围,但它包括,例如,第9列和第10列的单元格以及第3到第17行的单元格。以及最左边列中的相应单元格。另一方面,如果调用此范围的如何将格式应用于VBA宏(Word)中的非连续单元格范围?,vba,ms-word,Vba,Ms Word,我需要在MS Word文档中表格的矩形区域上执行一些简单任务。比如说,它包含10列20行。例如,我需要将文本居中放置在从第2列第3行到第8列第18行的单元格中。我试图得到一个从指定位置开始和结束的范围,但它包括,例如,第9列和第10列的单元格以及第3到第17行的单元格。以及最左边列中的相应单元格。另一方面,如果调用此范围的Select方法,它会根据需要选择一个矩形区域。但是,我不想使用选择,因为它们会使文本闪烁 作为解决方案,我迭代这些单元格,但需要很长时间。«作为解决方案,我迭代这些单元格,但
Select
方法,它会根据需要选择一个矩形区域。但是,我不想使用选择,因为它们会使文本闪烁
作为解决方案,我迭代这些单元格,但需要很长时间。«作为解决方案,我迭代这些单元格,但需要很长时间。» 下面的代码,包括错误检查,对于单个表,所需时间不到1秒:
Sub Demo()
Application.ScreenUpdating = False
Dim eTime As Single: eTime = Timer
Dim Tbl As Table, r As Long, Rng As Range
For Each Tbl In ActiveDocument.Tables
With Tbl
If .Rows.Count > 17 Then
If .Columns.Count > 7 Then
For r = 3 To 18
Set Rng = .Cell(r, 2).Range
With Rng
.End = .Rows(1).Cells(8).Range.End
.ParagraphFormat.Alignment = wdAlignParagraphCenter
End With
Next
End If
End If
End With
Next
Application.ScreenUpdating = True
eTime = (Timer - eTime + 86400) Mod 86400 ' Just in case execution time spans midnight
MsgBox "Execution took " & Format(eTime / 86400, "hh:mm:ss")
End Sub
«作为解决方案,我迭代这些单元格,但这需要很长时间。» 下面的代码,包括错误检查,对于单个表,所需时间不到1秒:
Sub Demo()
Application.ScreenUpdating = False
Dim eTime As Single: eTime = Timer
Dim Tbl As Table, r As Long, Rng As Range
For Each Tbl In ActiveDocument.Tables
With Tbl
If .Rows.Count > 17 Then
If .Columns.Count > 7 Then
For r = 3 To 18
Set Rng = .Cell(r, 2).Range
With Rng
.End = .Rows(1).Cells(8).Range.End
.ParagraphFormat.Alignment = wdAlignParagraphCenter
End With
Next
End If
End If
End With
Next
Application.ScreenUpdating = True
eTime = (Timer - eTime + 86400) Mod 86400 ' Just in case execution time spans midnight
MsgBox "Execution took " & Format(eTime / 86400, "hh:mm:ss")
End Sub
如果你展示你尝试过的东西,通常会得到更多的响应…@TimWilliams,实际上,我可以得到非连续单元格的
范围。就像选择
一样,如果你在一个表格中选择两个单元格。如果你展示你尝试过的内容,通常会得到更多的响应…@TimWilliams,事实上,我可以得到非连续单元格的范围
。如果您在表格中选择两个单元格,则与选择类似。当然!但是,如果我们谈论的是几十个表呢?但是,感谢您的屏幕更新!在一个包含200个表的文档中,所有这些表都需要重新格式化,我上面发布的修改后的代码在我的笔记本电脑上需要5秒钟。考虑到所涉及的工作(22400个单元格需要重新格式化),这几乎不是我所说的“很长时间”。当然!但是,如果我们谈论的是几十个表呢?但是,感谢您的屏幕更新!在一个包含200个表的文档中,所有这些表都需要重新格式化,我上面发布的修改后的代码在我的笔记本电脑上需要5秒钟。考虑到所涉及的工作(22400个单元格需要重新格式化),这几乎不是我所说的“很长时间”。