2

我有一个带有宏的模板,可以在单击按钮时验证数据。该模板只有一张纸,并且没有在该文件中添加任何图纸(它应该只有一张纸)。现在,我要做的是,当文件在没有启用宏的情况下打开时,我需要显示图像,请启用宏,否则不需要显示。

非常感谢您的帮助。

4

1 回答 1

6

如何强制用户在工作表中启用宏?

你的问题的答案是“你不能

但是,Ken Puls 提供了一个替代方案,可以很好地满足您的目的。

主题:强制用户在工作簿中启用宏

链接http ://www.vbaexpress.com/kb/getarticle.php?kb_id=379

引用该链接

由于无法使用宏来打开宏,因此需要一种确保用户已启用宏的技术。这种特殊方法隐藏了所有工作表,除了告诉用户启用宏的“欢迎”工作表,并且每次保存工作簿时都会强制执行。如果用户在启用宏的情况下打开工作簿,则工作表将全部被宏隐藏。工作表的隐藏也是使用 Excel 的 VeryHidden 属性完成的,这意味着不能使用 Excel 的菜单取消隐藏工作表。但是请记住,这只会影响此工作簿,因此用户可以使用另一个工作簿中的宏来取消隐藏所有工作表。但是,如果您的用户非常熟练,他们可能总是可以进入您的文件。注意:为防止某些事件循环问题,此代码需要推翻 Excel' s 内置保存事件,并且还需要复制 Excel 的“工作簿已更改,是否要保存”提示和操作。这段代码负责所有这一切。但是,它在关闭文件时确实会产生一个非常小的问题。如果用户尝试退出应用程序,它将关闭工作簿,但不会关闭 Excel。再次退出将完全关闭 Excel。

跟进

在关闭工作簿之前,请执行以下操作

  1. 插入新行
  2. 增加行高
  3. 隐藏其余行
  4. 在相关位置调整大小和移动图片

当你打开时做上面的相反

  1. 取消隐藏其余行
  2. 删除第一行
  3. 减小尺寸并将图片移动到工作表中的最左侧位置

重要

当您将图片放在工作表上时,右键单击图片并单击“设置图片格式”。在 中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

禁用宏时的快照

在此处输入图像描述

于 2012-06-20T04:05:46.390 回答