从Word中的表中读取日期而不包含其他字符

时间:2018-03-28 11:09:51

标签: vba ms-word word-table

所以我昨天开始使用VBA并继续撞墙。从长远来看,我试图创建一个Word模板,检查它是否仍然是最新的,或者是否需要进行修订。

现在我想将文档中的日期存储在变量中。我无法找到一种方法来直接读出日期格式的内容,所以现在我使用Selection.Text和CDate但是这给了我一个错误(不兼容的类型),因为我的选择似乎包含另一个字符或标记([])。我猜这与书签在我Word文档中的表格单元格上的事实有关,因为它在正在运行的文本中工作正常。

我在表格中这样做是因为这样我可以确定文档中的日期在哪里,因为我不确定如何在日期更改后重置书签。

我试图通过使用将选择限制为日期 Selection.SetRange开始:= 0,结束:= 8(以及一些变化),但只选择一个空格和不祥标记(或完全另一个单元格)。

我也研究过Ranges,但据我所知,它并没有解决我的问题而且我还没有真正使用它们,所以现在我仍然坚持选择。 / p>

这是我的代码:

Sub ChangeNextRev()

Dim nextRevision As Date
Dim RevisionDate As Date
Dim temp As String

'Selection.GoTo what:=wdGoToBookmark, Name:="lastRevision"
'Selection.SetRange Start:=0, End:=8

'Selection.GoTo what:=wdGoToBookmark, Name:="lastRevision"
Selection.GoTo what:=wdGoToBookmark, Name:="runningText"

temp = Selection.Text

RevisionDate = CDate(temp)
Debug.Print (RevisionDate)

nextRevision = RevisionDate + 14

With Selection

.GoTo what:=wdGoToBookmark, Name:="nextRevision"
.TypeText Text:=Format$(nextRevision, "DD.MM.YY")

End With

End Sub

有人能指出我正确的方向吗?我怎样才能选择我需要的日期?除了表格之外还有更简单的方法来控制输入日期的位置或之后找到日期吗? 我非常感谢任何有关我出错的地方的帮助:)

3 个答案:

答案 0 :(得分:0)

您对表格单元格的猜测是正确的,但您可以通过修剪无关的字符来解决这个问题。结束时是Chr(13)+ Chr(7)(Word段加上单元格结构标记)。

有多种方法可以对此进行编码,但我手头有以下功能:

'Your code, relevant lines, slightly altered:
  Selection.GoTo what:=wdGoToBookmark, Name:="runningText"

  temp = TrimCellText(Selection.Text)

  RevisionDate = CDate(temp)
  Debug.Print (RevisionDate)

'Function to return string without end-of-cell characters
Function TrimCellText(s As String) As String
    Do While Len(s) > 0 And (Right(s, 1) = Chr(13) Or Right(s, 1) = Chr(7))
        s = Left(s, Len(s) - 1)
    Loop
    TrimCellText = s
End Function

答案 1 :(得分:0)

如果日期是您可以使用的单元格中的唯一内容:

Dim Dt As Date
Dt = CDate(Replace(Split(ActiveDocument.Bookmarks("runningText").Range.Text, vbCr)(0), ".", "/"))

答案 2 :(得分:-1)

你可以尝试这些方面的东西

Sub test()

Dim d As Date

d = CDate(Replace(ThisDocument.GoTo(wdGoToBookmark, , , "TEST_BM").Text, ".", "/"))

Debug.Print d

End Sub