【教程】关于自动转换复杂的多层嵌套的域代码

经验创意 · 184 次浏览
臭冬瓜 创建于 2023-07-29 15:28

  大家都知道,域代码是WORD的一项非常重要的功能,平时我们经常会用到。但是如果遇到比较复杂的域代码,在输入的时候你会觉得是一件很痛苦的事情。

  比如:EXCELHOME的大神——守柔曾经写过一个比较复杂的域代码——在WORD文档中自动生成7天后的日期。这个对于编程来说小菜一碟,但是如果通过域代码来实现就是一件比较复杂的事情了。(详见:https://club.excelhome.net/thread-129784-1-1.html?_dsign=fe153e74

来让我们看看实现该功能的全部域代码:

{ SET YEAR { DATE \@"YYYY" } }
{ SET MONTH { DATE \@"M" } }
{ SET DAY { DATE \@"D" } }
{ IF { =OR( {=MOD({ YEAR },400) } =0,{=AND({ =MOD({ YEAR },4) } =0 ,{ =MOD({ YEAR },100) } <>0) } =1) } = 1 { SET TEMP 29 } { SET TEMP 28 } }'取得闰年2月份的最后一天
{ IF MONTH = 2 { SET X { TEMP } } { IF MONTH = 4 { SET X 30 } { IF MONTH = 6 { SET X 30 } { IF MONTH = 9 { SET X 30 } { IF MONTH = 11 { SET X 30 } { SET X 31 } } } } }}
{ SET NEXTD { = DAY +7 } }'日期+7天
{ IF { AND({ MONTH }=12,{ NEXTD }> X) } = 1 { SET YEAR { ={ YEAR }+1 } }}'如果是12月份,并且七天后的值超过最后日期的话,则进入下一年的一月份
{ IF NEXTD > X { SET MONTH {= MONTH+1 }} }
{ IF NEXTD > X { SET DAY { =NEXTD-X } } { SET DAY { NEXTD } } }
现在日期:
{ DATE \@"YYYY'年'M'月'D'日'" }
七天后的日期:
{ IF MONTH = 13 { =YEAR+1 } { YEAR } }年{ IF MONTH = 13 1 { MONTH } }月{ DAY }日

  大家可以尝试一下用手工录入,体会一下域代码的复杂程度。(注意:上面代码中的 { } 要用WORD域代码 CTRL+F9 的 { } 输入)

 

  现在不再需要这样费劲,因为编写了一个自动将文本域代码转换成WORD域代码的VBA代码(在"实验室"中的"插入转换复杂域代码")。

  先让我们来看看相关设置:

  插入和转换文本域代码的选项非常简单,只有两个:

(一)插入和转换方式:共有两种方式,分别是:

 1.在光标处插入域代码:在光标处插入自己录入的文本域代码,并转换成WORD域代码

 2.转换选中的文本域代码:自动将WORD文档选中区域中的文本域代码转换成WORD域代码

(二)文本域代码:需要插入并转换的文本型域代码

 PS:动作会自动保存用户每次输入的文本型域代码,如果需要对历史记录的文本型域代码进行编辑、删除等操作,可点击"管理历史代码"按钮:

  这时就可以对历史记录的文本型域代码进行添加、编辑、删除和排序等操作。需要注意的是,不会识别文本域代码的准确性,所以大家在录入的时候一定要确保文本域代码的准确性,否则插入到WORD文档中不会得出正确结果。

 

  最后,给大家一个动图实例:

 

【说明】这项功能主要针对插入和转换复杂的多层嵌套的域代码,如果域代码非常简单就没有必要使用该功能,直接输入即可。

臭冬瓜 最后更新于 2023/8/6

回复内容
暂无回复
回复主贴