[英]Word VBA: Macro to change cells in selection, and create a summary table of the tables?
我在文档中有一堆表,看起来像这样:
| Thing | Title |
|-----------|:---------:|
| Info | A, B, C. |
| Score | Foo |
| More Info | Long Text |
| Proof | Blah |
Figure 1
<Screenshot of Proof>
我想使它看起来像这样(左上角单元格中的数字):
| Thing #1 | Title |
|-----------|:-----------------:|
| Info | A, B, C. |
| Score | Foo |
| More Info | Long Text |
| Proof | Blah <Screenshot> |
但是,文档中有很多表,我只想使用“在选择范围内”的表。
简而言之:我必须将所有表格都放在一个选择中,并对其进行顺序编号。 我还想制作一个如下表的表:
| Number | Title | Score | Number of CSV's in Info |
|--------|:-----:|-------|-------------------------|
| 1 | Thing | Foo | 3 |
| ... | ... | ... | ... |
| ... | ... | ... | ... |
| ... | ... | ... | ... |
这是我到目前为止的内容:
编号表:
Sub NumberTablesSelection()
Dim t As Integer
Dim myRange as Range
Set myRange = Selection.Range
With myRange
For t = 1 To .Tables.Count
Set myCell = .Tables(t).Cell(1,1).Range
myCell.Text = "Thing #" + t
Next t
End With
End Sub
表格表(带信息):
Sub TableOfThings()
Dim t As Integer
Dim myRange as Range
Set myRange = Selection.Range
myTable = Tables.Add(Range:=tableLocation, NumRows:=1, NumColumns:=4)
myTable.Cell(1,1).Range.Text = "Number"
myTable.Cell(1,2).Range.Text = "Title"
myTable.Cell(1,3).Range.Text = "Score"
myTable.Cell(1,4).Range.Text = "Instances"
With myRange
For t = 1 To .Tables.Count
Set Title = .Tables(t).Cell(1,2).Range
Set Instances = .Tables(t).Cell(2,2).Range
Set Score = .Tables(t).Cell(3,2).Range
Set NewRow = myTable.Rows.Add
NewRow.Cells(1).Range.Text = t
NewRow.Cells(2).Range.Text = Title
NewRow.Cells(3).Range.Text = Score
NewRow.Cells(4).Range.Text = Instances
End With
End Sub
但是它们完全无法按照我想要的方式工作,而且我似乎无法设法使它们正常工作。
有人可以为我提供解决方案吗?
我们需要考虑以下方面,宏才能按需运行:
有了这些和一些小的调整,下面复制的修改后的代码应该可以工作。
Option Explicit
Sub NumberTablesSelection()
Dim t As Integer, myRange, myCell As Range
Set myRange = Selection.Range
With myRange
For t = 1 To .Tables.Count
Set myCell = .Tables(t).Cell(1, 1).Range
myCell.Text = "Thing #" & t
Next t
End With
End Sub
Sub TableOfThings()
Dim t As Integer, myRange As Range, myTable As Table, NewRow As Row, Title As String, Instances As Integer, Score As String
Set myRange = Selection.Range
Selection.EndKey Unit:=wdStory
Set myTable = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=1, NumColumns:=4)
With myTable
.Style = "Table Grid"
.Rows(1).Shading.BackgroundPatternColor = -603917569
.Cell(1, 1).Range.Text = "Number"
.Cell(1, 2).Range.Text = "Title"
.Cell(1, 3).Range.Text = "Score"
.Cell(1, 4).Range.Text = "Instances"
End With
With myRange
For t = 1 To .Tables.Count
Title = .Tables(t).Cell(1, 2).Range
Instances = UBound(Split(.Tables(t).Cell(2, 2).Range, ",")) + 1
Score = .Tables(t).Cell(3, 2).Range
Set NewRow = myTable.Rows.Add
With NewRow
.Shading.BackgroundPatternColor = wdColorAutomatic
.Cells(1).Range.Text = t
.Cells(2).Range.Text = txtClean(Title)
.Cells(3).Range.Text = txtClean(Score)
.Cells(4).Range.Text = Instances
End With
Next t
End With
End Sub
Function txtClean(txt As String) As String
txt = Replace(txt, Chr(7), "")
txt = Replace(txt, Chr(13), "")
txt = Replace(txt, Chr(11), "")
txtClean = txt
End Function
编辑:结果列Instances
已更改为“实例数”,而不是显示原始值。
这是基于评论的解决方案。 它只是基于读取代码而不进行测试的,因此希望它可以工作。 如果需要一些调整,请随时进行编辑。
Sub NumberTablesSelection()
Dim t As Integer
Dim myRange as Range
Set myRange = Selection.Range
With myRange
For t = 1 To .Tables.Count
Set myCell = .Tables(t).Cell(1,1)
myCell.Range.Text = "Thing #" & t
Next t
End With
End Sub
表格表(带信息):
Sub TableOfThings()
Dim t As Integer
Dim tbl as Table
Dim myRange as Range
Set myRange = Selection.Range
myTable = Tables.Add(Range:=tableLocation, NumRows:=1, NumColumns:=4)
myTable.Cell(1,1).Range.Text = "Number"
myTable.Cell(1,2).Range.Text = "Title"
myTable.Cell(1,3).Range.Text = "Score"
myTable.Cell(1,4).Range.Text = "Instances"
t = 1
For each tbl in myRange.Tables
With tbl
Set Title = .Cell(1,2).Range
Set Instances = .Cell(2,2).Range
Set Score = .Cell(3,2).Range
End With
Set NewRow = myTable.Rows.Add
With NewRow
.Cells(1).Range.Text = t
.Cells(2).Range.Text = Title
.Cells(3).Range.Text = Score
.Cells(4).Range.Text = Instances
End With
t = t + 1
Next tbl
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.