首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代码可以作为常规sub运行,但不会作为Workbook_Open()事件运行

代码可以作为常规sub运行,但不会作为Workbook_Open()事件运行。

在Excel中,VBA代码可以通过两种方式运行:作为常规sub运行和作为Workbook_Open()事件运行。

  1. 常规sub运行:代码可以通过手动执行或其他宏的调用来运行。这种方式适用于需要在特定时间点或特定条件下运行代码的情况。例如,你可以创建一个按钮,并将代码与按钮关联,当用户点击按钮时,代码会被执行。
  2. Workbook_Open()事件运行:Workbook_Open()是Excel VBA中的一个特殊事件,它在打开工作簿时自动触发。你可以将代码放置在Workbook_Open()事件中,以便在打开工作簿时自动执行。这种方式适用于需要在工作簿打开时自动执行的代码。例如,你可以在工作簿打开时自动加载数据或进行初始化操作。

对于给定的代码,如果它可以作为常规sub运行,但不会作为Workbook_Open()事件运行,可能有以下几种原因:

  1. 代码没有被正确放置在Workbook_Open()事件中:确保将代码放置在工作簿的ThisWorkbook对象中的Workbook_Open()事件中。在VBA编辑器中,双击工作簿对象,然后选择Workbook_Open()事件,将代码放置在其中。
  2. 工作簿的安全设置阻止了自动运行宏:Excel具有安全设置,可以阻止自动运行宏以保护用户的安全。如果工作簿的安全设置禁用了宏的自动运行,那么Workbook_Open()事件中的代码将不会执行。你可以通过更改Excel的安全设置来解决此问题。
  3. 代码中存在错误:如果代码中存在语法错误或逻辑错误,它可能无法正常运行。在VBA编辑器中,使用调试工具(如断点、单步执行等)来检查代码并修复错误。

总结起来,如果代码可以作为常规sub运行,但不会作为Workbook_Open()事件运行,你需要确保代码正确放置在Workbook_Open()事件中,并检查工作簿的安全设置是否允许自动运行宏。同时,检查代码中是否存在错误,并进行修复。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Excel VBA事件——Workbook

Workbook事件中用的比较多的是: Workbook_Open:文件打开后执行的代码 Workbook_BeforeClose:文件关闭前执行的代码 这两个事件在Office2007版本之前使用应该还是比较多的...那时候运行代码除了插入按钮来运行之外,用的比较多的就是自定义一个菜单来运行,2007版本之后仍然是可以使用的,但是因为有了Ribbon菜单,所以一般是不建议再去创建下拉式菜单了。...用程序创建下拉式菜单后,如果不删除菜单将会一直存在,所以当时的代码一般处理方式是在Workbook_Open中创建菜单,然后在Workbook_BeforeClose中删除菜单: Private Sub...上面说的是2007版本之前用的比较多的一个场景,这两个事件可以用在其他很多地方。 比如一个程序文件有一些配置信息是存储在外部的,那么就可以使用Workbook_Open事件在文件打开的时候去读取。...、保存配置信息就不会遗忘了,Workbook的事件会自动帮助完成。

1.1K10

VBA专题10-6:使用VBA操控Excel界面之执行命令以及激活功能区选项卡的两种方法

SendKeys方法 例如,下面的VBA代码模拟按下ALT、A和ALT键: Application.SendKeys "%A%" 将上面的语句放在Workbook_Open事件中,在打开该工作簿时,将激活...“数据”选项卡: Private Sub Workbook_Open() Application.SendKeys "%A%" End Sub 注意,在Excel的有些版本中,在Excel窗口被装载之前...,Workbook_Open事件中的SendKeys方法执行得过早。...为了解决这个问题,可以使用OnTime事件在执行Workbook_Open事件一至两秒后,发送按键,如下面的代码: Private Sub Workbook_Open() '在1秒后执行SendKeystrokes...为了避免不可预料的结果,总是使用SendKeys方法作为最后的手段,并且确保活动窗口是想要发送按键的正确的窗口。

3.7K20
  • Excel VBA事件

    在Excel VBA里提供了接口,在发生这些事件之前或者之后,让使用者可以设置一段运行的程序。 比如双击打开工作簿,可以设置运行一段程序: ?...上面就是一个工作簿打开事件运行一段程序: Private Sub Workbook_Open() MsgBox "工作簿打开了" End Sub 这种格式是固定的,必须按照这种模式,Excel...这几个模块也可以像普通的模块一样编写代码,但是一般都是存放一些事件代码,像上面的Workbook_Open,是必须放在ThisWorkbook模块里面才会有效果的。...,中间仍然可以调用普通模块的函数或者过程,而这些函数或者过程的代码可以存放在普通的模块中。...而且事件用的不恰当,会影响Excel的运行效率,刚接触事件的可能会觉得比较好玩,建议事件的使用场所是在一些比较简单的表格里,一旦数据运算非常复杂了,尽量不要去使用。

    1.4K30

    Excel揭秘25:突破数据有效性列表的字符限制

    使用单元格区域 然而,如果使用逗号分隔的字符串作为数据列表的来源,你会发现这样的字符串的字符数被限制为255个字符,超过此限制的字符串根本无法输入到数据来源中。...当然,这样的限制不会带来问题,因为你还可以使用单元格区域中的数据作为数据列表来源。 但是,有趣的是,使用VBA代码编程,却也可以给数据列表提供大于255个字符的字符串。...下面的代码创建了一个逗号分隔的344个字符的字符串,并在A1中创建了一个数据有效性列表。...运行代码后的结果如下图2所示。...你可能会说,我可以Workbook_Open事件中添加长列表,然后在Workbook_BeforeSave事件中将其删除以避免修复问题,但是使用代码绕过限制字符数没有很好的用处。

    2.7K20

    VBA代码库10:强制用户启用宏

    如果用户在启用了宏的情况下打开工作簿,则宏将不会隐藏所有工作表。还可以使用Excel的 VeryHidden属性来实现工作表的隐藏,这意味着不能使用Excel的菜单来取消隐藏工作表。...但是,这只会影响该工作簿,因此用户可以使用另一个工作簿中的宏取消隐藏所有工作表。但是,如果用户非常熟练,他们总是可以始终进入你的文件中。...注意:为防止某些事件循环问题,此代码需要覆盖Excel内置的Save事件,并且还需要复制Excel的“工作簿已更改,您要保存”提示和操作,代码负责所有这些工作。...下面是代码: Const WelcomePage = "欢迎" Private Sub Workbook_BeforeClose(Cancel As Boolean) '关闭事件以阻止不必要的循环...= True End Sub Private Sub Workbook_Open() '取消隐藏所有工作表 Application.ScreenUpdating = False

    2.4K40

    过程(一)定义和分类

    二、过程的分类 过程主要分为三类,通用过程、事件过程和属性过程,其中通用过程又分为Sub(子程序)过程和Function(函数)过程。 前面已经接触过事件过程和Sub(子程序)过程。...1、事件过程 事件过程就是学过的excel事件,包括工作簿事件、工作表事件、窗体控件事件、以及ontime和onkey事件等等。 事件过程,在对应的模块中选择对象和事件后,会自动添加事件过程的代码。...3、通用过程 有时再不同的事件过程中,需要执行一段相同的代码,就可以把这段代码独立出来,作为一个过程,这样的过程称为“通用过程”。...对于通用过程的理解,在介绍事件的案例,“每隔一分钟定时保存工作簿的案例中,实际就是在模块中定义了dingshi和baocun两个通用过程。这两段代码过程被独立出来可以执行一些功能。...然后在thisworkbook模块中创建workbook_open事件过程,在过程中调用dingshi过程来实现功能的。

    1.7K30

    Excel VBA解读(135): 影响工作表公式中运用自定义函数效率的Bug及解决方法

    学习Excel技术,关注微信公众号: excelperfect 在前面的两篇文章中,我们通过简单地修改VBA代码来使自定义函数运行得更快。...在VBE中存在一个小的Bug:Excel每次在工作表计算过程中运行包含自定义函数的公式时,包含自定义函数的公式都会将VBE标题栏改更为“正在运行”,如下图1所示。 ?...如果Excel处于手动计算模式,可以捕获触发计算的所有键击,并在VBA代码中启动计算。...Sub 如果是自动计算模式,比较有效的方法是在ThisWorkbook模块中添加代码: Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal...End If Calculate End Sub 然而,它不会停止首次的自动计算,但会捕获后续的计算。

    2.3K20

    VBA实战技巧28:自动关闭指定时间没有进行操作的工作簿

    有时候,我们打开了一个工作簿,长时间没有使用,此时,你可能想让Excel自动将其关闭。也就是说,对于某个工作簿,如果用户在指定的时间内没有进行任何操作,那么Excel会保存并关闭该工作簿。...下面的代码可以实现上述目的。...() ThisWorkbook.CloseSaveChanges:=True End Sub可以修改NUM_MINUTES的值,设置让工作簿在没有操作的情况下保持开启的时间。...在VBE资源管理器窗口,双击ThisWorkbook打开该模块,输入代码: Private Sub Workbook_Open() On Error Resume Next Application.OnTime...每当更改单元格值或更改单元格选择时,此代码都会取消并重新恢复OnTime事件

    2K30

    VBA小技巧06: 一句代码限定工作表可编辑单元格

    有时候,一条小小的代码能够起到很好的效果。例如,我们希望仅能编辑工作表中的指定区域,其他区域不可编辑,只有一些控件能够操作,一些VBA代码能够在后台运行,如下图1所示。 ?...图1 在图1所示的工作表中,我们只能编辑单元格区域B2:C3,只能查看工作表的可见部分,当然,还能够单击按钮控件,运行VBA代码。...想要实现这样的效果,在ThisWorkbook代码模块中,输入下面的代码: Private Sub Workbook_Open() Worksheets("Sheet1").ScrollArea...="$B$2:$C$3" End Sub 这样,每次打开该工作簿,将限定工作表Sheet1中的可编辑区域为B2:C3。...你可以根据你的需要,在代码中修改该区域。

    1.2K30

    VBA自动筛选完全指南(下)

    图3 在数据集所在的工作表代码模块中,输入下面的事件代码: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address...如果不想关闭整个工作表中的筛选,只想关闭特定数据集中的筛选,可以使用下面的代码Sub TurnOffAutoFilter1() If Worksheets("Sheet1").Range("...注意,这不会删除筛选,筛选图标仍然可用。 在受保护的工作表中使用自动筛选 默认情况下,当工作表受保护时,不能应用筛选。...图4 虽然这在已设置了筛选时有效,如果尝试使用VBA代码添加自动筛选,它将不起作用。由于工作表受到保护,因此不允许运行任何宏并对自动筛选进行更改。...Private Sub Workbook_Open() With Worksheets("Sheet1") .EnableAutoFilter = True .Protect

    3.6K30

    VBA工程:代码操作代码常用语句,向工程自动添加模块,代码等操作!!!

    " & Chr(10) &_ "msgbox""Hello""" & Chr(10) & _ "end sub" End Sub 方法2: 在模块指定行处增加代码,原代码后移。...建立事件过程除了使用上面的代码如下面的AddEventsCode1外,还可以使用CreateEventProc方法,如AddEventsCode2所示。...Workbook_Open()"& Chr(13) & _ "MsgBox""Hello""" & Chr(13) & _ "End Sub" End Sub CreateEventProc...安全性(M)-可靠发行商(T)-勾选了“信任对于VB项目的访问(V)” (2)工程没有设置密码 如果不能满足它们中的任何一个,代码运行就会出错。...借助于这道后门和“错误陷阱”,我们仍可以完成我们所要做的事。 下面给出绕开这两道门的示意代码,如果你要运行它们,请记得切回EXCEL主界面,而不是在VBE中直接运行

    4.6K20

    Excel实战技巧78: 创建个人宏工作簿

    个人宏工作簿是一个文件,可以在应用程序开启时运行其中的VBA代码,就像是运行功能区选项卡中的命令一样。创建个人宏工作簿很简单,如下所示。...按Alt+F11键,打开VBE编辑器,可以到工程资源管理器窗口中有一个名为“Personal.xlsb”的VBA工程。 ?...= Wb.ActiveSheet.Name End Sub 接着,插入一个标准模块并命名为TabBack,输入代码: Dim TabTracker As New TabBack_Class '初始化...最后,双击打开ThisWorkbook模块,输入代码: '打开工作簿时运行 Private Sub Workbook_Open() Call TabBack_Run End Sub 保存并关闭...注意,因为个人宏工作簿中的功能可以应用到所有工作簿中,所以在编写代码时应使用ActiveWorkbook,而不是ThisWorkbook。

    2.7K30
    领券