上标序数在表中

时间:2018-02-15 16:05:07

标签: vb.net ms-word

我正在尝试在表中的日期上选择序号,并使用vb.NET将其更改为上标。以下是我的尝试:

Private Sub btnWordEditor_Click(sender As Object, e As EventArgs) Handles btnMinutes.Click

    Dim wdApp As Word.Application = Nothing
    Dim wdDoc As Word.Document = Nothing
    Dim OrdinalType As String = "th"

    wdApp = CreateObject("Word.Application")
    wdDoc = wdApp.Documents.Open("C:\VB\Trial.docx")  
    wdDoc.Tables(1).Cell(4, 2).Range.Find.Execute(FindText:=OrdinalType)
    wdDoc.Application.Selection.Font.Superscript = 9999998
 End Sub

这对序数没有任何作用。我的代码中缺少什么来执行此编辑?

2 个答案:

答案 0 :(得分:1)

问题是你正在搜索Range对象,但是你正在尝试将格式应用于当前的Selection。

如果在Selection对象上运行Find,那么如果找到了某些内容,则格式化将应用于它。如果您要搜索的内容,则格式化将应用于选择,就像您开始搜索时一样。

因此搜索Range是正确的事情,但您需要1)指定一个Range(而不是整个文档)和2)将格式应用于该Range。您运行查找的范围将更改为找到的范围,Execute如果成功则返回True

例如:

Private Sub btnWordEditor_Click(sender As Object, e As EventArgs) Handles btnMinutes.Click
  Dim wdApp As Word.Application = Nothing
  Dim wdDoc As word.Document
  Dim OrdinalType As String = "th"
  Dim rngToSearch As word.Range = Nothing
  Dim isFound As Boolean = false

  wdApp = CreateObject("Word.Application")
  wdDoc = wdApp.Documents.Open("C:\VB\Trial.docx")
  rngToSearch = wdDoc.Tables(1).Range
  isFound = rngToSearch.Find.Execute(findText:=OrdinalType)
  If isFound Then
     rngToSearch.Font.Superscript = 999998
  End If
End Sub

答案 1 :(得分:1)

以下VBA代码会在表格中的日期部分添加上标序号格式:

With wdDoc.Tables(1).Cell(4, 2).Range
    StrVal = Split(Split(.Text, " ")(1), ",")(0)
    .Start = .Start + InStr(.Text, StrVal) + Len(StrVal) - 1
    .End = .Start
    .InsertAfter Ordinal(Val(StrVal))
    .Font.Superscript = True
End With
End Sub

Function Ordinal(Val As Long) As String
Dim strOrd As String
If (Val Mod 100) < 11 Or (Val Mod 100) > 13 Then strOrd = Choose(Val Mod 10, "st", "nd", "rd") & ""
Ordinal = IIf(strOrd = "", "th", strOrd)
End Function

我会留给你做任何VB.Net转换。假设日期的一部分是单元格中的第二个“单词”(即您使用的是“月日”序列)。如果它是单元格中的第一个“单词”(即您使用的是'日月年'序列),请更改:

StrVal =拆分(拆分(.Text,“”)(1),“,”)(0)

为:

StrVal =拆分(拆分(.Text,“”)(0),“,”)(0)