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

时间:2012-06-20 03:57:13

标签: excel vba excel-vba

我有一个带有宏的模板,可以在点击按钮时验证数据。该模板只有一张纸,并且该文件中没有添加纸张(它应该只有一张纸)。现在,我要做的是,当文件打开而没有启用宏时,我需要显示一个图像,请启用其他明智的宏,无需显示。

非常感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:6)

  

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

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

然而,这是Ken Puls的另一种选择,它可以很好地适合你的目的。

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

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

来自该链接的语录

  

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

<强>后续

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

  1. 插入新行
  2. 增加行的高度
  3. 隐藏其余行
  4. 调整大小并在相关位置移动图片
  5. 当你打开时,执行与上面相反的操作

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

      将图片放在图纸上时,右键单击图片并单击“格式图片”。在Format Picture Dialog中,选择Don't move or size with cells并取消选中Print Object

      选项

      enter image description here

      关闭工作簿时的代码 - 应用上述链接中显示的相同概念

      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中显示图像。你可以通过调整Shape的.Top.Left来修改它以显示你想要的图片。

      如果MACRA被禁用则快照

      enter image description here