首页 > 解决方案 > 如何按特定字符串对单词表进行排序,这是第一列每行内的 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)吗?

标签: vbams-word

解决方案


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

推荐阅读