【发布时间】:2019-08-06 20:12:46
【问题描述】:
我希望客户只有在启用宏时才能看到文档。
我发现以下代码可以通过隐藏显示表在 excel 上运行,但找不到代码的“文字版本”。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
.Sheets("Request").Visible = xlVeryHidden
.Sheets("Patching").Visible = xlVeryHidden
.Sheets("SACM Attributes").Visible = xlVeryHidden
.Save
End With
End Sub
Private Sub Workbook_Open()
With ThisWorkbook
.Sheets("Request").Visible = True
.Sheets("Patching").Visible = True
.Sheets("SACM Attributes").Visible = True
End With
End Sub
如果他想查看文档,我想“强制”客户启用宏,方法是隐藏文本并仅在他按下“启用宏”时才显示它,或者创建一个密码提示,要求他这样做(客户端将通过邮件或其他类似方式收到密码。
提前致谢, AVI。
更新: 使用@Gareth 的建议我想出了这个(在文本前面放置一张图片并按下启用内容来显示它):
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:="^g", _ ReplaceWith:="", Replace:=wdReplaceAll
我的问题是,如果图片不在默认布局中(如文本前面的正方形/),^g 无法识别它... P.S 我知道图片可以手动删除。
【问题讨论】:
-
遗憾的是,我认为这不是 Word 中的选项(尽管我不是专家),但您可以在运行时通过 VBA 构建内容(或使文档有价值的部分)。 . 所以如果客户不启用宏,他就得不到他想要的。反转关闭文档的过程,但也可能添加一个保存前事件(如果有),以防止保存已经填充了您要隐藏的内容的文档。
-
您无法像使用 Excel 那样做到这一点,并且记住 VBA 密码非常容易破解,您可以做几件事。一是让阅读文本变得非常困难。您可以在每个页面上放置整页图像,告诉用户启用宏并在打开宏运行时删除它们。或者你可以通过打乱它使文本难以阅读。 但是如果有人向我发送了一个带有 VBA 的 Word 文档,我将永远打开它,除非我 100% 确定它来自哪里以及代码做了什么。
-
@FAB 谢谢,我已经设法使用事件“Document_Open”和“selection.typetext text:=
”进行编写,这不是最理想的结果,但它有效并且真的很近。 -
@Gareth 谢谢你,这是个好主意。我知道从未知来源打开文件的风险,尤其是运行代码的文件。