我正在尝试在表中的日期上选择序号,并使用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
这对序数没有任何作用。我的代码中缺少什么来执行此编辑?
答案 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)