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

关闭并重新打开文件后,从其他工作簿添加的与Excel工作表相关的代码将消失

当您在Excel中关闭并重新打开文件后,从其他工作簿添加的与工作表相关的代码消失,这通常是因为这些代码没有被保存在Excel文件本身中。在Excel中,有两种类型的VBA(Visual Basic for Applications)代码:工作簿级别的代码和工作表级别的代码。

基础概念

  • 工作簿级别的代码:存储在工作簿的ThisWorkbook对象中。
  • 工作表级别的代码:存储在特定工作表的Sheet对象中。

相关优势

  • 模块化:可以将代码组织在不同的模块中,便于管理和维护。
  • 重用性:可以在多个工作簿之间共享代码模块。

类型

  • 模块:包含通用的VBA代码。
  • 类模块:用于创建自定义对象。
  • 表单和报告模块:用于处理用户界面元素。

应用场景

  • 自动化任务:如批量数据处理、报告生成等。
  • 用户界面设计:创建自定义对话框和工具栏。
  • 数据验证和保护:设置复杂的输入规则和保护工作簿结构。

问题原因

当您从其他工作簿复制代码并粘贴到当前工作簿的VBA编辑器中时,如果没有正确地保存这些更改,或者代码被粘贴到了不正确的位置(例如,不是粘贴到模块中),那么在关闭并重新打开文件时,这些代码就会丢失。

解决方法

  1. 确保代码粘贴到正确的位置
    • 打开VBA编辑器(按Alt + F11)。
    • 在“项目资源管理器”中,找到您的工作簿。
    • 右键点击工作簿名,选择“插入” -> “模块”,然后将代码粘贴到新模块中。
  • 保存更改
    • 在VBA编辑器中完成代码编辑后,关闭VBA编辑器。
    • 在Excel中,点击“文件” -> “保存”,确保工作簿以.xlsm格式保存,因为这是包含宏的工作簿格式。
  • 使用绝对路径引用外部代码
    • 如果需要引用外部工作簿中的代码,可以使用绝对路径来确保Excel能够找到并加载这些代码。

示例代码

假设您有一个宏MyMacro,您想将它从一个工作簿复制到另一个工作簿:

代码语言:txt
复制
Sub MyMacro()
    ' 这里是您的宏代码
    MsgBox "Hello, World!"
End Sub
  1. 打开目标工作簿的VBA编辑器。
  2. 插入一个新模块。
  3. MyMacro宏代码粘贴到模块中。
  4. 关闭VBA编辑器,并保存工作簿。

通过这种方式,即使您关闭并重新打开工作簿,宏代码也会保留在其中。

注意事项

  • 确保您的Excel启用了宏功能。
  • 在共享或分发包含宏的工作簿时,要注意安全性设置,以防止宏被恶意软件利用。

通过上述步骤,您可以确保从其他工作簿添加的代码在关闭并重新打开文件后仍然存在。

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

相关·内容

一起学Excel专业开发21:Excel工时报表与分析系统开发(3)——自定义用户界面

设置背景图片 最简便的方法是将应用程序工作簿中的一个工作表作为其“桌面”,向其中添加背景图片,并将工作簿最大化,设置工作表的显示属性使其显示范围扩大到整个Excel窗口,去除工作簿窗口中的控制框和最大最小化按钮...代码如下: '从加载宏复制背景工作簿到新建工作簿并进行配置 Sub PrepareBackDrop() Dim wkbBook As Workbook '已经有背景对象吗?...如果应用程序使用基于工作表的用户接口,则应该将工作表作为主要的数据录入界面和显示报表的界面,而对话框应只用于少量的任务和向导程序。...'关闭任何现有的结果工作簿 '询问要打开的新工作簿的名称 '检查它是否是结果工作簿,然后将其打开 Sub MenuFileOpen() Dim vFile As Variant '在创建新工作簿前关闭现有的结果工作簿...'关闭事件后,必须有一些错误处理,以确保总是可将它们重新打开 On Error GoTo ErrHandler '初始化处理计数器 lCount = 0 lTotal

1.9K10

Excel编程周末速成班第3课:Excel对象模型

例如,你的程序打开一个工作簿并需要使用其现有的一个工作表。在其他时候,该对象不存在,并且你的程序必须创建该对象并获得引用(例如,当向工作簿中添加新工作表时)。...下面的代码示例演示如何使用ForNext … In循环关闭所有打开的工作簿,并保存所有更改。...参数PrToFileName,输出文件的名称(仅在PrintToFile为True时相关)。 提示:PrintOut方法可用于其他几个Excel对象,包括图表、单元格区域、窗口和工作表。...复制和移动工作表 可以将整个工作表复制或移动到原始工作簿中的新位置或其他工作簿中,其语法如下(使用Move方法移动工作表;语法与Copy相同): 工作表.Copy(Before,After) 工作表是对要复制的工作表的引用...Excel工作簿由Workbooks集合中的Workbook对象表示。提供了用于创建新工作簿和打开现有工作簿,保存和关闭工作簿以及其他必需任务的方法。 工作表由Sheets集合中的Sheet对象表示。

5.1K30
  • Power Query 真经 - 第 4 章 - 在 Excel 和 Power BI 之间迁移查询

    这有可能是将查询从一个 Excel 工作簿中复制到另一个 Excel 工作簿中,从 Excel 复制到 Power BI,或者从 Power BI 复制到 Excel。...但是,如果用户打开一个由其他人建立的解决方案,或者这个解决方案用到的数据源位置已经不同时,在将查询复制另一个位置之前,更新源文件路径是一个好主意。...关闭为前面的例子所创建的新工作簿。 打开 Power BI。 返回到 Excel 中的查询链工作簿。...选择该文件【打开】。 【注意】 从 Excel 工作簿中导入的能力并不依赖于 Excel 程序。...将数据类型更改为【日期】。 选择【添加新的步骤】(不是【替换当前转换】)。 完成此操作后,就可以通过进入【主页】【关闭并应用】,让 Power BI 应用这些改变来最终完成查询。

    7.8K20

    Excel小技巧79:如何跟踪Excel工作簿的修改

    如果你对Excel工作表进行更改,然后在45天后再次打开该工作簿,则在关闭该工作簿之前,你将能够看到所有45天的更改历史记录。但关闭时,任何超过30天的更改历史记录都将消失。...这意味着下次打开它时,你将无法看到45天前所做的更改。 4. 无论何时开启跟踪,工作簿都将成为共享工作簿。这意味着多个用户将对文档进行更改。...图4 你可以通过不勾选该复选框来隐藏屏幕上的更改,将文件发送给所有需要对其进行更改的人,当你取回文件时,只需到“修订”并重新勾选该复选框。 设置跟踪 下一步是查看跟踪设置,并根据需要进行调整。...查看更改 开启跟踪并进行一些更改后,可以再次单击“修订——突出显示修订”按钮,你将注意到“在新工作表上显示修订”复选框不再是灰色显示,如下图6所示。 ?...图6 单击“确定”按钮,将添加一个名为“历史记录”的工作表,让你查看对该工作簿所做的所有更改,如下图7所示。 ? 图7 在某个时候,你需要接受或拒绝更改。

    6.6K30

    Power Query 真经 - 第 6 章 - 从Excel导入数据

    毫无疑问,对于开始就以表格形式处理数据的人来说,最简单的方法之一是打开 Excel 并开始在工作表中记录数据。...图 6-2 数据被直接导入 Power Query 中,打开预览窗口 【注意】 如果将 Power Query 在【应用的步骤】窗口中记录的步骤与 “CSV” 文件中记录的步骤进行比较,会注意到从表导入时...将查询的名称改为 “FromDynamicRange”。 单击【关闭并上载至】【表】【新工作表】【确定】。 6.1.5 连接到工作表 不幸的是,无法从当前工作簿中获取整个工作表数据。...创建一个新的查询,进入【数据】选项卡,【获取数据】【来自文件】【从工作簿】。 【警告】 Power Query 不能从一个打开的工作簿中读取数据。...图 6-14 下钻到 “Sales” 表的位置 结果是,现在可以看到,从外部工作簿中导入的表与从同一工作簿中导入的表的处理方式非常相似,如图 6-15 所示。

    16.6K20

    一起学Excel专业开发18:Excel工时报表与分析系统开发(2)——创建特定应用加载宏(续)

    将工时输入工作簿中的副本保存到预先设定好的合并区 图1所示的自定义工具栏中的第一个按钮的作用是将工时输入工作簿的副本保存到合并区,其代码如下: '保存已完成的工时输入工作簿副本到指定的合并位置 Public...最后,调用Workbook对象的SaveCopyAS方法将工作簿副本保存到合并区,并给出提示信息告诉用户操作成功。...注意,在插入新行之前先删除工作表滚动区域设置,插入新行后再重新添加滚动区域设置。如果不这么操作,那么在插入新行时工作表滚动区无法进行正确调整。...在工时输入工作簿关闭后,该过程检查是否还有其他可见工作簿处于打开状态。如果没有,则关闭Excel。如果有可见工作簿处于打开状态,则只关闭该工作簿而不关闭Excel。...而在合并区中,可能还存放着其他工作簿文件,这要求合并程序能够自动排除这些无关工作簿。

    1.3K20

    一起学Excel专业开发17:Excel工时报表与分析系统开发(2)——创建特定应用加载宏

    Excel工时报表与分析系统(PETRAS)加载宏的功能: 1.启动和初始化应用程序 2.为应用程序的各项功能创建工具栏 3.打开和初始化“工时输入”工作簿 4.允许用户将数据输入工作簿中的内容复制到预先设定好的合并区...5.允许用户向“工时输入”工作表中添加更多的数据输入行 6.允许用户清除数据输入区域中的数据,以便重新使用工时输入表 7.允许用户关闭PETRAS程序 8.添加自定义属性,合并程序可据此查找“工时输入...”工作簿的所有实例进程 在《一起学Excel专业开发16:使用表驱动的方法管理工作表用户接口》中,我们已经创建了表驱动的用于接口工作簿的工作表。...打开并初始化时间输入工作簿 下面的程序读取用于接口设置的工作表中的数据并在接口工作簿中进行使用: '将设置应用到时间输入工作簿的所有工作表 Public Sub MakeWorksheetSettings...在接口工作簿初始化完成后,运行过程ResetAppProperties过程,确保Excel应用程序相关的属性均被设置为默认值。

    1K20

    Excel数据表分割(实战记录)

    End Sub 请按照以下步骤操作(Sheet): 打开Excel,按下ALT + F11打开VBA编辑器。 在左侧的“项目资源管理器”窗格中,找到你的工作簿,并双击打开。...End Sub 请注意,此代码将创建新的工作簿,并在每个新工作簿中复制相应的数据。你可以根据需求修改代码中的保存路径和文件名。运行代码后,将显示一个弹出窗口,指示成功分割为多少个新表。...如果需要更改行数或其他相关参数,只需修改代码中相应的行数即可。 修改代码中的数据区域,可以将其更改为你想要分割的数据所在的范围。...请注意,在代码中,我假设原始数据从第一行开始,且每个新表都保存为单独的Excel文件。你可以根据实际需求进行修改。...请注意,这段代码也假设原始数据从第一行开始,并且每个新表保存为单独的Excel文件。你可以根据实际需求进行修改。

    39720

    Excel VBA编程

    隐藏活动工作表外的所有工作表 批量新建指定名称的工作表 批量对数据进行分离,并保存到不同的工作表中 将多张工作表中的数据合并到一张工作表中 将工作簿中的每张工作表都保存为单独的工作簿文件 将多个工作簿中的数据合并到同一张工作表中...保存工作簿 save方法保存已存在的文件 saveas方法将工作簿另存为新文件 另存为新文件后不关闭原文件 thisworkbooks.save thisworkbooks.saveas filename...想让excel在删除指定的单元格后,按自己的意愿处理其他单元格,我们需要编写VBA代码将自己的意图告诉excel。...当在工程中添加一个窗体后,就可以在窗体上自由的添加ActiveX控件,只要通过编写VBA代码为这些控件指定功能,就能利用这些控件与excel互动 在工程中添加一个用户窗体 设置属性,改变窗体的外观...标签告诉VBA,当程序运行过程中晕倒运行时错误时,跳转到标签所在行的代码继续执行程序,实际上就是让程序跳过出错的代码,从另一个地方重新开始执行程序。

    45.8K33

    一起学Excel专业开发20:Excel工时报表与分析系统开发(3)——启动与关闭

    2.对于检查是否安装了其他应用程序,可以利用API函数直接查看注册表,或者使用函数CreateObject来创建一个应用程序的进程实例,并判断是否创建成功。...而保存这些设置最方便的地方是加载宏中的工作表,或者是与应用程序相同目录下的纯文本文件,或者是注册表。...该过程中调用RestoreMenus过程来恢复Excel的工具栏: '恢复最初的菜单结构.在独立应用程序中, '最简单的方法是重新打开xlb文件....为避免发生这种情况,恢复工具栏配置信息最好的方法是在应用程序关闭之前查找并打开xlb文件,这样,Excel就不会觉察到任何变化,也就不会对xlb文件进行任何修改。...5.关闭任务栏中的窗口。因为可能会处理多个打开的工作簿,此时不允许用户在这些工作簿之间进行跳转。 6.不允许定制命令栏。 7.针对Excel 2002及其以后的版本关闭自动恢复功能。

    1.4K20

    ChatGPT与Excel结合_编写VBA宏

    才知道原来excel也可以写代码,打开方式是:在开发工具中选择VB宏 那怎么用ChatGPT与Excel结合来编写VBA宏呢?...End Sub 请将代码中的"路径\文件名.xlsx"替换为你希望保存的路径和文件名。运行该宏后,会将第3行到第9行的每一行数据复制到一个新的工作簿,并将其保存在指定的路径下。...5️⃣改完路径就会弹窗(要关闭这个弹窗才可以打开新的excel表格文件哦) 6️⃣执行完,打开刚刚设置的路径文件,程序执行pass~~ 虽然chatGPT没有理解我的命令是“每一行...”生成新表格,但“回炉再造”一遍就好,重要的是学会ChatGPT与Excel结合来编写VBA宏 ---- 案例2 又比如我的需求是:编写一个Excel VBA宏,将工作薄,每个工作表中的图片,移动到A1...End Sub 运行该宏后,它会遍历当前Excel工作簿中的每个工作表,并删除每个工作表中的所有图片。在删除图片之后,会弹出一个提示框显示操作已完成。

    54020

    ChatGPT与Excel结合_编写VBA宏

    才知道原来excel也可以写代码,打开方式是:在开发工具中选择VB宏 那怎么用ChatGPT与Excel结合来编写VBA宏呢?...End Sub 请将代码中的"路径\文件名.xlsx"替换为你希望保存的路径和文件名。运行该宏后,会将第3行到第9行的每一行数据复制到一个新的工作簿,并将其保存在指定的路径下。...5️⃣改完路径就会弹窗(要关闭这个弹窗才可以打开新的excel表格文件哦) 6️⃣执行完,打开刚刚设置的路径文件,程序执行pass~~ 虽然chatGPT没有理解我的命令是“每一行...”生成新表格,但“回炉再造”一遍就好,重要的是学会ChatGPT与Excel结合来编写VBA宏 ---- 案例2 又比如我的需求是:编写一个Excel VBA宏,将工作薄,每个工作表中的图片,移动到A1...End Sub 运行该宏后,它会遍历当前Excel工作簿中的每个工作表,并删除每个工作表中的所有图片。在删除图片之后,会弹出一个提示框显示操作已完成。

    66010

    Excel应用实践11:合并多个工作簿中的数据——示例2

    在上一篇文章《Excel应用实践10:合并多个工作簿中的数据》中,我们使用代码快速合并超过50个Excel工作簿文件,然而,如果要合并的工作簿中工作表的名称不相同,但位于每个工作簿的第1个工作表;并且,...要在合并后的工作表的第1列中输入相对应的工作簿文件名,以便知道合并后的数据来自哪个工作簿文件。...Not flg Then '将打开的文件的第1个工作表中的第1行数据 '复制到开头新添加的Combined工作表第1行...Application.ScreenUpdating = True Set ws = Nothing End Sub 代码遍历所选择的每个工作簿文件,将数据依次添加到新增加的工作表中,...同时在工作表首列添加工作簿文件名。

    2.8K20

    工作簿有密码,自动刷新数据,没问题! | PQ重要技巧

    然鹅,偏偏回到Excel本身,如果工作簿设置了密码,Power Query却没有提供输入密码自动刷新的功能,结果,碰到有密码的Excel工作簿时,刷新就会出错,还提示为“文件包含损坏的数据”……如下图所示...这个时候,不要忘了还有咱们的老朋友VBA嘛!通过Power Query与VBA的强强联合,咱们就可以刷新对带密码Excel工作簿数据的自动刷新。...: 重要技巧:这里如果直接引用带密码的Excel工作簿,后面的数据处理过程将无法进行,所以,应该先把要加密的Excel工作簿解密,处理好后再重新加密。...- 3 - VBA实现解密刷新 通过VBA,我们可以用密码打开数据源工作簿,清除密码,然后刷新查询,刷新完毕后再对数据源工作簿重新加密……是不是很像“把大象放进冰箱里”的三个步骤?...'2、刷新数据 ThisWorkbook.Connections("查询 - 表2").Refresh '3、重新打开工作簿,设置密码并保存关闭 Set wb = Workbooks.Open

    4K41

    VBA专题10-23:使用VBA操控Excel界面之添加动态菜单

    复制并粘贴下面的XML代码: image.png group元素不仅能够包含动态菜单,而且还可包含其他控件。 6. 单击工具栏中的Validate按钮检查是否有错误。 7. 保存并关闭该文件。...保存,关闭,然后重新打开该工作簿。...然而,如果用户在设置勾选该复选框后,通过单击工作表标签激活其他工作表,那么动态菜单被无效,与菜单相关的任何数据(包括复选框的勾选条件)将被销毁。...接着,通过在使复选框无效前存储复选框状态的Checkbox1Pressed变量重新赋值该复选框的状态。 5. 保存,关闭,然后重新打开该工作簿。...如果要在用户关闭并重新打开该文件之后保留该复选框的状态,那么可能要在隐藏的工作表或者在Windows注册表中存储其状态。

    6.2K20

    Excel应用实践14:合并多个工作簿中的数据—示例3

    学习Excel技术,关注微信公众号: excelperfect 要合并工作簿的情形有许多种,但最终的目的只有一条,将繁锁的手工操作自动化,让程序快速帮助我们完成这些重复的工作。...本例中,要合并的工作簿放置在同一文件夹中,为方便描述,这些工作簿名称和其要合并的数据工作表如下(假设要合并的工作簿有3个): “工作簿1.xlsm”中的工作表“完美Excel” “工作簿2.xlsm”中的工作表...要求: 1.将这些工作簿中的工作表合并到名为“合并.xlsm”工作簿的工作表“数据”中。...2.在“合并.xlsm”工作簿工作表“数据”的列F中,放置对应行数据来源工作簿工作表名,例如如果数据行2中的数据来自工作表“完美Excel”,则在该行列F单元格中输入“完美Excel”。...3.要合并的工作簿工作表,例如工作簿1.xlsm中的“完美Excel”数据发生变化后,在“合并.xlsm”工作表中运行代码后,会清除“数据”工作表中原先的数据并重新合并上述工作簿中的工作表数据。

    1.6K40

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

    下面讲解的方法隐藏除“欢迎”工作表(告诉用户启用宏)之外的所有工作表,并在每次保存工作簿时强制执行该工作表。如果用户在启用了宏的情况下打开工作簿,则宏将不会隐藏所有工作表。...还可以使用Excel的 VeryHidden属性来实现工作表的隐藏,这意味着不能使用Excel的菜单来取消隐藏工作表。但是,这只会影响该工作簿,因此用户可以使用另一个工作簿中的宏取消隐藏所有工作表。...注意:为防止某些事件循环问题,此代码需要覆盖Excel内置的Save事件,并且还需要复制Excel的“工作簿已更改,您要保存”提示和操作,代码负责所有这些工作。...但是,在关闭文件时确实会产生一个非常小的问题。如果用户尝试退出该应用程序,它将关闭工作簿,而不是Excel。再次退出将完全关闭Excel。...代码放置在ThisWorkbook代码模块中。 2. 工作簿中应该有一个名为“欢迎”的工作表,否则你要将代码前面的常量WelcomePage设置为用户没有启用宏时的提示工作表名称。

    2.5K40

    【改进和增强Microsoft Office应用程序】ExtendOffice软件产品介绍

    02、管理组中的文档详细信息在Office选项卡中,您可以将保存的Microsoft Office文件添加到组中。 您可以快速打开一组文档或一组Excel文件,依此类推。...将文档添加到组中 打开一组文件 关闭一组文档 保存一组文档03、轻松命名文件夹您无需打开“另存为”对话框即可重命名文件。 只需在选项卡的上下文菜单中单击“重命名”,然后输入新文件名,就这么简单!...07、关闭文件上下文菜单还包含以下选项:“关闭”,“全部关闭”和“其他关闭”,使用户可以灵活地关闭打开的文档,双击选项卡上的左按钮或单击鼠标中键将很快关闭打开的文档。...例如,Excel用户可以轻松地将工作表与几次单击合并,合并单元格而不会丢失数据,仅粘贴到可见的单元格,等等。 无疑,此功能强大且用户友好的加载项将为Excel用户节省大量工作时间,并大大提高工作效率。...07、从Outlook中分离/自动分离附件分离附件功能可以帮助删除所选邮件中的附件,同时将它们保存到特定文件夹中,分离附件文件后,附件将转换为电子邮件中的超链接文本,在这种情况下,您可以单击超链接快速轻松地打开附件文件

    11.3K20

    VBA专题10-15:使用VBA操控Excel界面之在功能区中添加自定义标签控件

    excelperfect 如果要在功能区选项卡中添加标签,那么执行下面的步骤: 1. 创建新工作簿并保存为启用宏的工作簿。 2. 关闭该工作簿,然后在CustomUI Editor中打开该工作簿。...一旦使某元素无效,任何与该元素相关的数据就被销毁,并且通过调用所有的在XML代码中声明的该元素的回调属性引用的VBA过程来自动刷新该元素。因此,要提高效率,应仅使必需的元素无效。...之后,要将其粘贴到工作簿的VBA模块中。 7. 保存并关闭该文件。 8. 在Excel中打开该工作簿文件。...因为是第一次在Excel中打开该文件,会得到关于getLabel1的错误消息的提示,因为在标准的VBA模块中还没有getLabel1回调过程。此时,单击“确定”关闭错误消息。 9...., " & Application.UserName End If End Sub 关闭后重新打开工作簿,在自定义选项卡中的标签控件显示如下图: ?

    2.3K10
    领券