有人知道如何在 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 文件夹中的内容。