键盘快捷键将粘贴的日期从数字格式更改为文本格式

键盘快捷键将粘贴的日期从数字格式更改为文本格式

有人知道如何在 Microsoft Word 中将日期从数字格式更改为文本格式吗?

例如,如果我输入(或粘贴)日期 03/07/1992 - 是否有键盘快捷键可以将其更改为 1992 年 3 月 7 日?

我一直在寻找但似乎找不到答案。

请注意,我不需要知道插入当前日期的键盘快捷键。我说的是从应用程序粘贴到 Microsoft Word 文档中的随机日期。

太感谢了!

答案1

如果没有字段或 vba 编码,就没有直接的方法可以做到这一点。

也就是说,没有内置的键盘快捷键,也没有可以附加键盘快捷键的 Word 命令。

请参阅我的页面Microsoft Word 中的日期字段

以下字段可以实现您想要的功能:

{ Quote "[Pasted Content]" \@ "MMMM d, yyyy" }

引号是必须的。[粘贴的内容]代表您正在粘贴的内容。

你可以把这样的字段设为自动文本条目并附加键盘快捷键到它。然后您需要编辑字段以粘贴您的内容。

这似乎比直接输入你想要的内容更麻烦。如果你愿意,也许可以编写一个宏来做到这一点。键盘快捷键也可以创建宏。宏也可以不使用字段进行转换,只需插入文本即可。

这是一个可以完成您想要的操作的宏。

它依赖于在 Microsoft 网站上找到的代码获取粘贴的数据。

Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) _
   As Long
Declare Function CloseClipboard Lib "User32" () As Long
Declare Function GetClipboardData Lib "User32" (ByVal wFormat As _
   Long) As Long
Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, ByVal _
   dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) _
   As Long
Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) _
   As Long
Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) _
   As Long
Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _
   ByVal lpString2 As Any) As Long
 
Public Const GHND = &H42
Public Const CF_TEXT = 1
Public Const MAXSIZE = 4096

Function ClipBoard_GetData()
    '   https://docs.microsoft.com/en-us/office/vba/access/concepts/windows-api/retrieve-information-from-the-clipboard
   Dim hClipMemory As Long
   Dim lpClipMemory As Long
   Dim MyString As String
   Dim RetVal As Long
'   Dim CF_TEXT As String
 
   If OpenClipboard(0&) = 0 Then
      MsgBox "Cannot open Clipboard. Another app. may have it open"
      Exit Function
   End If
          
   ' Obtain the handle to the global memory
   ' block that is referencing the text.
   hClipMemory = GetClipboardData(CF_TEXT)
   If IsNull(hClipMemory) Then
      MsgBox "Could not allocate memory"
      GoTo OutOfHere
   End If
 
   ' Lock Clipboard memory so we can reference
   ' the actual data string.
   lpClipMemory = GlobalLock(hClipMemory)
 
   If Not IsNull(lpClipMemory) Then
      MyString = Space$(MAXSIZE)
      RetVal = lstrcpy(MyString, lpClipMemory)
      RetVal = GlobalUnlock(hClipMemory)
       
      ' Peel off the null terminating character.
      MyString = Mid(MyString, 1, InStr(1, MyString, Chr$(0), 0) - 1)
   Else
      MsgBox "Could not lock memory to copy string from."
   End If
 
OutOfHere:
 
   RetVal = CloseClipboard()
   ClipBoard_GetData = MyString
 
End Function

上面的代码来自微软网站。

宏是:

Sub DatePasteFormatted()
    ' Charles Kenyon 9 March 2022
    ' requires code from https://docs.microsoft.com/en-us/office/vba/access/concepts/windows-api/retrieve-information-from-the-clipboard
    Dim strPaste As String
    Let strPaste = ClipBoard_GetData
    Let strPaste = Format(strPaste, "MMMM d, yyyy")
    Selection.TypeText strPaste
End Sub

这不会检查剪贴板中的日期,但它应该适用于任何日期。所有代码都需要放在同一个标​​准 vba 模块中。

这里有一个在论坛上找到有关如何使用宏的链接作者为 Word MVP Graham Mayor。

这里有一个链接到包含宏的模板。您可能无法下载启用宏的模板。以下是zip 文件夹中的内容

相关内容