Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何强制用户在工作表中启用宏?_Vba_Excel - Fatal编程技术网

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

Vba 如何强制用户在工作表中启用宏?,vba,excel,Vba,Excel,我有一个带有宏的模板,可以在单击按钮时验证数据。该模板只有一张图纸,但没有在该文件中添加图纸(它应该只有一张图纸)。现在,我要做的是,当文件在没有启用宏的情况下打开时,我需要显示一个图像,请启用宏,否则无需显示 事先非常感谢您的帮助 如何强制用户在工作表中启用宏 你的问题的答案是“你不能” 然而,这里有一个由肯·普尔斯(Ken Puls)设计的替代方案,它将很好地满足您的需求 主题:强制用户在工作簿中启用宏 链接: 引用那个链接 由于无法使用宏打开宏,因此需要一种确保用户启用宏的技术。此特定方法

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

事先非常感谢您的帮助

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

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

然而,这里有一个由肯·普尔斯(Ken Puls)设计的替代方案,它将很好地满足您的需求

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

链接

引用那个链接

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

跟进

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

  • 插入新行
  • 增加行的高度
  • 隐藏其余的行
  • 调整图片大小并将其移动到相关位置
  • 当你打开时,做上面的相反操作

  • 取消隐藏其余行
  • 删除第一行
  • 减小尺寸并将图片移动到图纸中最左侧的位置
  • 重要

    将图片放在工作表上时,右键单击图片并单击“设置图片格式”。在
    格式化图片对话框
    中,选择
    不移动或不使用单元格调整大小
    ,然后取消选中显示
    打印对象

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

    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
    
    打开工作簿时编码-应用与上述链接中所示相同的概念

    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”
    。我正在单元格
    A1
    中显示图像。您可以通过调整形状的
    .Top
    .Left
    来修改该选项,以便在任何需要的地方显示图片

    禁用宏时的快照


    如果您可以强制用户启用宏,那么坏人可以强制用户运行恶意宏。感谢您的快速响应,如何解决此问题。请帮助……感谢Siddharth在解决问题时给予的支持。但我的文件中只有一张纸,没有要添加到该文件中的纸。在给定的示例中,我们需要再添加一张图纸。请帮助在一张工作表中完成同样的操作。感谢增加第1行的高度(隐藏其余行)并显示图像,如果启用了宏,则将高度降低到正常值,并将图像移动到工作表的最右侧。如果你想举个例子,请告诉我,请举个例子。谢谢。你想显示一个图像还是一条信息就足够了?我设计了一个图像显示“请在你的模板上启用宏”。我需要显示该图像,如果宏被禁用,否则它应该消失。