我有一个带有宏的模板,可以在单击按钮时验证数据。该模板只有一张纸,并且没有在该文件中添加任何图纸(它应该只有一张纸)。现在,我要做的是,当文件在没有启用宏的情况下打开时,我需要显示图像,请启用宏,否则不需要显示。
非常感谢您的帮助。
如何强制用户在工作表中启用宏?
你的问题的答案是“你不能”
但是,Ken Puls 提供了一个替代方案,可以很好地满足您的目的。
主题:强制用户在工作簿中启用宏
链接:http ://www.vbaexpress.com/kb/getarticle.php?kb_id=379
引用该链接
由于无法使用宏来打开宏,因此需要一种确保用户已启用宏的技术。这种特殊方法隐藏了所有工作表,除了告诉用户启用宏的“欢迎”工作表,并且每次保存工作簿时都会强制执行。如果用户在启用宏的情况下打开工作簿,则工作表将全部被宏隐藏。工作表的隐藏也是使用 Excel 的 VeryHidden 属性完成的,这意味着不能使用 Excel 的菜单取消隐藏工作表。但是请记住,这只会影响此工作簿,因此用户可以使用另一个工作簿中的宏来取消隐藏所有工作表。但是,如果您的用户非常熟练,他们可能总是可以进入您的文件。注意:为防止某些事件循环问题,此代码需要推翻 Excel' s 内置保存事件,并且还需要复制 Excel 的“工作簿已更改,是否要保存”提示和操作。这段代码负责所有这一切。但是,它在关闭文件时确实会产生一个非常小的问题。如果用户尝试退出应用程序,它将关闭工作簿,但不会关闭 Excel。再次退出将完全关闭 Excel。
跟进
在关闭工作簿之前,请执行以下操作
当你打开时做上面的相反
重要。
当您将图片放在工作表上时,右键单击图片并单击“设置图片格式”。在 中Format Picture Dialog
,选择Don't move or size with cells
并取消选中显示的选项Print Object
关闭工作簿时的代码 - 应用与上述链接中所示相同的概念
Dim shp As Shape
With Sheets("Sheet1")
.Rows(1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
.Rows(1).RowHeight = 300
.Rows("2:" & .Rows.Count).EntireRow.Hidden = True
Set shp = .Shapes("Picture 1")
With shp
.Top = Sheets("Sheet1").Range("A1").Top
.Left = Sheets("Sheet1").Range("A1").Left
.LockAspectRatio = msoFalse
.Height = 100
.Width = 100
End With
End With
打开工作簿时的代码 - 应用与上面链接中所示相同的概念
Dim shp As Shape
With Sheets("Sheet1")
.Rows("1:" & .Rows.Count).EntireRow.Hidden = False
.Rows(1).Delete
Set shp = .Shapes("Picture 1")
With shp
.LockAspectRatio = msoFalse
.Height = 0
.Width = 0
.Top = Sheets("Sheet1").Range("A1").Top
.Left = Sheets("Sheet1").Range("IV1").Left
End With
End With
注意:在上面的代码中,替换"Sheet1"
为相关的工作表名称并替换"Picture 1"
为相关的图片名称。我在 Cell 中显示图像A1
。.Top
您可以通过调整形状来修改它以显示您想要的图片.Left
。
禁用宏时的快照