vba - 如何按特定字符串对单词表进行排序,这是第一列每行内的 HH:MM 时间
问题描述
我有一个包含三个表格的 word 文档(如下面的表格),我需要按第一列每行中显示的小时数(第一次遇到参考)对其进行排序。如果我应用盲目排序,例如:
ActiveDocument.Tables(1).Sort ExcludeHeader:= true, SortOrder:=wdSortOrderAscending
在不是从时间参考开始而是以其他一些词开始的表格上,这种类型的排序将无法按我的需要工作。它只会考虑在每行中找到的第一个单词。谁能对如何解决这个问题有一些想法?出于示例的目的,请考虑如下表:
描述
标题1 | 标题2 |
---|---|
Às 11.00 iniciou.se a do Gr.# da NNN。 | F |
Às 16.18 iniciou-se a do Gr.# da FFF。 | G |
Das 07.05 至 16.57 Bateria de Condensadores # da CCC。 | ķ |
Das 07.22 às 16.24 a do disjuntor IBBP de 400 kV da KKK。 | D |
Das 08.10 至 16.58 a do disjuntor #do módulo ## do PPPPP。 | 是 |
Das 08.27 às 17.34 a do disjuntor IBBP de 220 kV da LLLL。 | 小号 |
Das 09.00 iniciou-se a do Gr.# da JJ。 | H |
Das 10.00 至 14.59 os Gr.#, Gr.# e Gr.# da VVV。 | R |
Das 10.04 至 19.16 一个 Reactância Shunt da GGGG。 | H |
Das 14.00 至 15.23 o Gr.# e das 14.00 至 16.11 o Gr.# da HHH。 | ü |
Das 14.00 至 16.55 o Gr.# da MMM。 | 一个 |
所以我不知道每行开始的单词,但我需要在排序过程中忽略它们。我可以用一些 vba 来做这个 word 文档(docm)吗?
解决方案
For example:
Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long
For Each Tbl In ActiveDocument.Tables
With Tbl
.Columns.Add beforecolumn:=.Columns(1)
For r = 2 To .Rows.Count
.Cell(r, 1).Range.Text = .Cell(r, 2).Range.Words.First
.Cell(r, 2).Range.Words.First.Text = vbNullString
Next
.Sort ExcludeHeader:=True, FieldNumber:="Column 2", _
SortFieldType:=wdSortFieldAlphanumeric, _
SortOrder:=wdSortOrderAscending
For r = 1 To .Rows.Count
.Cell(r, 1).Merge Mergeto:=.Cell(r, 2)
.Cell(r, 1).Range.Paragraphs.First.Range.Characters.Last.Text = vbNullString
Next
End With
Next
Application.ScreenUpdating = True
End Sub
推荐阅读
- css - 特定元素上的 CSS Grid 行/列间隙?
- soapui - 努力在soap ui中的测试用例级别引用属性值
- django - 显示选项的描述性状态
- angular - 我如何根据食物描述调整我的食物卡如果它是空的或空白的?
- ios - “Apple 开发者计划许可协议”已更新
- css - css nth-child() 检查板模式
- java - libgdx - setProjectionMatrix
- javascript - Firebase 似乎试图在身份验证序列运行之前开始侦听快照更新。有任何解决这个问题的方法吗?
- ruby-on-rails - 在 rails 中使用omniauth-saml 设置和配置google saml
- c - 从 C 中的 stdin 泄漏内存