excel 在Word中创建自定义日期字段(WWYY)

798qvoo8  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(280)

我正尝试使用Excel公式文本(WEEKNUM(TODAY()),“00”)&文本(TODAY(),“YY”)在Word中显示WWYY
文档的目的是显示文档打开时的星期和年份。假设文档是今天打开的,它应该显示0823。
基本上,如果我转到Insert -〉Date & Time,我希望看到一个自定义日期字段,如WWYY。
我试着在excel中创建公式并链接到word,但它不起作用。为了方便起见,我只想在word中实现这一点。

ygya80vv

ygya80vv1#

假设您的word文档中有文本“WWYY”,我提到的方法至少会将“WWYY”替换为您想要的格式。
您必须将文档保存为启用了Word宏的文档(.docm)。使用快捷方式Alt+F11Option+fn+F11打开Microsoft Visual Basic编辑器(macOS)。单击左侧项目工具栏上的ThisDocumentThisDocument的代码编辑器将打开。现在,您可以使用以下类似的代码将WWYY的示例替换为填充的值。的日期WWYY将被替换为0823。我还编写了另一个函数,当文件关闭时,该函数将把值(即0823)恢复为WWYY。这样,当文件在不同的时间打开时,该功能仍然有效。
注意!它将替换WWYY0823的所有示例。因此,更好的办法是使用WWYY的前缀。在文档中,您将拥有Prefix WWYY以及ReplaceWWYY和ReplaceWWYY函数中的相应前缀。(ReplaceWWYY中的.Text = "Prefix WWYY"以及ReplaceWWYY中的.Text = "Prefix " + CStr(Forma....Replacement.Text = "Prefix WWYY")。

Private Sub Document_Close()
    Call RevertWWYY
End Sub

Private Sub Document_New()

End Sub

Private Sub Document_Open()
    Call ReplaceWWYY
End Sub
 
Sub ReplaceWWYY()
With Selection.Find
     .Forward = True
     .Text = "WWYY"
     .Replacement.Text = CStr(Format(DatePart("ww", Date, vbMonday, vbFirstFourDays), "00")) + CStr(Right(Year(Date), 2))
     .Execute Replace:=wdReplaceAll, Forward:=True, _
     Wrap:=wdFindContinue
    End With
    ActiveDocument.Save
End Sub
Sub RevertWWYY()
With Selection.Find
     .Forward = True
     .Text = CStr(Format(DatePart("ww", Date, vbMonday, vbFirstFourDays), "00")) + CStr(Right(Year(Date), 2))
     .Replacement.Text = "WWYY"
     .Execute Replace:=wdReplaceAll, Forward:=True, _
     Wrap:=wdFindContinue
    End With
    ActiveDocument.Save
End Sub
h5qlskok

h5qlskok2#

Word中没有与Excel中的WEEKDAY函数等效的函数。可以通过编码为以下形式的字段来获得所需的结果:

{
{SET a{=INT((14-{DATE \@ M})/12)}}
{SET b{={DATE \@ YYYY}+4800-a}}
{SET c{={DATE \@ M}+12*a-3}}
{SET d{DATE \@ d}}
{SET JDEnd{=d+INT((153*c+2)/5)+365*b+INT(b/4)-INT(b/100)+INT(b/400)-32045}}

{SET a 1}
{SET b{={DATE \@ YYYY}+4800-a}}
{SET c 10}
{SET d 0}
{SET JDStart{=d+INT((153*c+2)/5)+365*b+INT(b/4)-INT(b/100)+INT(b/400)-32045}}

=INT((JDEnd+6-INT(JDStart/7)*7)/7) \# 00}{DATE \@ YY}

上述域代码基于我的Microsoft Word日期计算教程中的 * 计算两个日期之间的天数差 * 示例,可从以下网址获得:
https://www.msofficeforums.com/word/38719-microsoft-word-date-calculation-tutorial.html

**注意:**以上示例中的字段大括号对(即“{}”)都是在文档本身中创建的,通过Ctrl-F9(在Mac上使用Cmd-F9,或者如果您使用笔记本电脑,则可能需要使用Ctrl-Fn-F9);你不能简单地输入它们或者从这封邮件中复制粘贴它们。通过任何标准的Word对话框添加它们也是不切实际的。在字段构造中表示的空格都是必需的。换行符不是必需的--它们只是用来使代码结构更容易看到。

有关将上述域代码表示形式转换为工作域代码的宏,请参阅Mailmerge提示和技巧主题中的 * 将域的文本表示形式转换为工作域 *:
https://www.msofficeforums.com/mail-merge/21803-mailmerge-tips-tricks.html
对于希望简化获取JDStart的字段代码的任何人,可以减少:

{SET a 1}
{SET b{={DATE \@ YYYY}+4800-a}}
{SET c 10}
{SET d 0}
{SET JDStart{=d+INT((153*c+2)/5)+365*b+INT(b/4)-INT(b/100)+INT(b/400)-32045}}

致:

{SET b{={DATE \@ YYYY}+4799}}
{SET JDStart{=365*b+INT(b/4)-INT(b/100)+INT(b/400)-31739}}

相关问题