在 Word 中读取 table 的日期,无需其他字符
Reading date from table in Word without additional characters
所以我从昨天开始 VBA 并一直 运行 宁到墙上。在漫长的 运行 中,我正在尝试创建一个 Word 模板来检查它是否仍然是最新的或者是否到了修订的时候。
现在我想将文档中的日期存储在一个变量中。我找不到直接读取日期格式内容的方法,所以现在我正在使用 Selection.Text 和 CDate 但这给了我一个错误(不兼容的类型),因为我的 selection 似乎包含另一个字符或标记 ([])。我猜这与书签在我的 Word 文档中 table 的单元格上有关,因为它在 运行ning 文本中工作正常。
我在 table 中执行此操作,因为这样我可以确定相关日期在文档中的位置,因为我不确定如何在日期更改后重置书签改变了。
我试图通过使用将 selection 限制为日期
Selection.SetRange 开始:=0,结束:=8(和一些变体)但是 select 只是一个 space 和不祥的标记(或完全是另一个单元格)。
我也研究过 Ranges,但据我所知,它并没有解决我的问题,我还不能真正使用它们,所以现在我坚持使用 selection。
这是我的代码:
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
有人能指出我正确的方向吗?我怎样才能只 select 我需要的日期?除了 table 之外,还有更简单的方法来控制输入日期的位置或之后查找日期吗?
任何关于我哪里出错的帮助将不胜感激:)
您可以按照这些思路尝试一些东西
Sub test()
Dim d As Date
d = CDate(Replace(ThisDocument.GoTo(wdGoToBookmark, , , "TEST_BM").Text, ".", "/"))
Debug.Print d
End Sub
您对 table 单元格的猜测是正确的,但您可以通过删除无关字符来解决这个问题。 End-of-cell 是一个Chr(13) + Chr(7) (Word paragraph plus cell structure marker).
有多种编码方法,但我有以下函数at-hand:
'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
如果日期是您可以使用的单元格中的唯一内容:
Dim Dt As Date
Dt = CDate(Replace(Split(ActiveDocument.Bookmarks("runningText").Range.Text, vbCr)(0), ".", "/"))
所以我从昨天开始 VBA 并一直 运行 宁到墙上。在漫长的 运行 中,我正在尝试创建一个 Word 模板来检查它是否仍然是最新的或者是否到了修订的时候。
现在我想将文档中的日期存储在一个变量中。我找不到直接读取日期格式内容的方法,所以现在我正在使用 Selection.Text 和 CDate 但这给了我一个错误(不兼容的类型),因为我的 selection 似乎包含另一个字符或标记 ([])。我猜这与书签在我的 Word 文档中 table 的单元格上有关,因为它在 运行ning 文本中工作正常。
我在 table 中执行此操作,因为这样我可以确定相关日期在文档中的位置,因为我不确定如何在日期更改后重置书签改变了。
我试图通过使用将 selection 限制为日期 Selection.SetRange 开始:=0,结束:=8(和一些变体)但是 select 只是一个 space 和不祥的标记(或完全是另一个单元格)。
我也研究过 Ranges,但据我所知,它并没有解决我的问题,我还不能真正使用它们,所以现在我坚持使用 selection。
这是我的代码:
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
有人能指出我正确的方向吗?我怎样才能只 select 我需要的日期?除了 table 之外,还有更简单的方法来控制输入日期的位置或之后查找日期吗? 任何关于我哪里出错的帮助将不胜感激:)
您可以按照这些思路尝试一些东西
Sub test()
Dim d As Date
d = CDate(Replace(ThisDocument.GoTo(wdGoToBookmark, , , "TEST_BM").Text, ".", "/"))
Debug.Print d
End Sub
您对 table 单元格的猜测是正确的,但您可以通过删除无关字符来解决这个问题。 End-of-cell 是一个Chr(13) + Chr(7) (Word paragraph plus cell structure marker).
有多种编码方法,但我有以下函数at-hand:
'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
如果日期是您可以使用的单元格中的唯一内容:
Dim Dt As Date
Dt = CDate(Replace(Split(ActiveDocument.Bookmarks("runningText").Range.Text, vbCr)(0), ".", "/"))