【问题标题】:VBA Checking if clipboard is from within document or from somewhere elseVBA检查剪贴板是来自文档内还是来自其他地方
【发布时间】:2021-09-09 18:32:54
【问题描述】:

我已经使用强制样式锁定保护了 word 中的工作表。我想制作一个宏,允许在具有原始格式的文档中粘贴,并且只允许粘贴来自其他来源的文本。

我想让它看起来像:

Public Sub Pasting()


If "pasting within document = true" Then
Set aDoc = ActiveDocument
aDoc.Unprotect
Selection.PasteAndFormat Type:=wdFormatOriginalFormatting
aDoc.Protect wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=True
Else
Selection.Paste 'it will remove formating anyway because of file being protected
End If


End Sub

我不知道如何处理它以及如何设计条件语句。 请帮忙,谢谢:)

【问题讨论】:

  • 为什么不简单地使用 Word 中已经内置的选项来根据源设置粘贴格式? 文件>选项>高级>剪切、复制和粘贴.
  • 它在受保护的文件中不起作用。我想制作只能通过宏(格式)编辑的文件,而不是让别人通过从另一个来源粘贴来破坏格式。但我想让复制粘贴到由宏文本格式化的内部。
  • 当您说“从文档粘贴”时,您是指同一个文档(存在检查代码的地方),还是 Word 以外的其他内容?
  • 我的意思是只允许从当前文档粘贴到同一个文档的格式。并在我从另一个文档和另一个程序粘贴时禁用格式化。我想制作不能从外部使用格式的文档。

标签: vba ms-word copy-paste protected


【解决方案1】:

我尝试了类似下面的方法,但它也允许从其他 Word 文档中粘贴格式。我想避免它 - 只允许从当前文档粘贴格式。 也许有人知道如何修改它?

Private Declare PtrSafe Function GetClipboardOwner Lib "user32" () As Long
Public a As Long
Sub Document_open()
ActiveDocument.Paragraphs(1).Range.Copy
a = GetClipboardOwner
End Sub


'and
Private Declare PtrSafe Function GetClipboardOwner Lib "user32" () As Long
Public Sub Pasting()

If GetClipboardOwner = ThisDocument.a Then
    Set aDoc = ActiveDocument
    aDoc.Unprotect
    Selection.PasteAndFormat Type:=wdFormatOriginalFormatting
    aDoc.Protect wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=True
Else
Selection.Paste
End If


End Sub

【讨论】:

  • 这不应该作为答案发布。这只是您问题的扩展。问题下方有一个Edit 链接,您应该使用它来添加更多详细信息。
  • 谢谢下次我会这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2015-04-11
  • 2021-11-21
  • 1970-01-01
相关资源
最近更新 更多