标签:VBA,工作簿事件 使用下面的代码,可以强迫用户在保存Excel工作簿时将其保存为.xlsm文件。 SaveAsUI = True Then strWorkbookName = Application.GetSaveAsFilename( _ fileFilter:="Excel启用宏工作簿(*.xlsm ", , 1))) Case "xlsm": FileFormatValue = 52 End Select ActiveWorkbook.SaveAs strWorkbookName Application.EnableEvents = True End Sub 这样,在保存Excel工作簿时,在“另存为”对话框的“保存类型”下拉列表中,只有一个选项即“Excel启用宏工作簿(*.xlsm )”,如下图1所示,从而让用户只能将工作簿保存为.xlsm文件。
文章背景:工作生活中涉及到VBA,时常要将Excel文件保存为.xlsm格式。而在右键新建的可选项中,一般只有.xlsx文件。下面介绍如何在右键新建选项中添加启用宏的工作簿.xlsm。 (2) 在注册表编辑器界面,找到.xlsm所在位置。 路径:计算机\HKEY_CLASSES_ROOT.xlsm (3)在.xlsm文件夹上点击右键,依次选择新建、项,并重命名为:shellnew。 (6)回到.xlsm文件夹,点击新建的shellnew文件夹,双击FileName打开,将刚才复制的内容填到数值数据中,并将最后的ecxel12.xlsx 改为 excel14m.xlsm。 参考资料: [1] 如何在右键中添加“新建启用宏的工作簿.xlsm”(https://jingyan.baidu.com/article/066074d62dca1cc3c21cb099.html)
相比于xlsm文件,采用xls格式存在一些不足之处:一是保存同样的内容,xls文件占用空间相对更大;二是xls文件能支持的单元格格式个数是4,000;而xlsm文件能支持的单元格格式个数是64,000。 因此,有必要将xls文件另存为xlsm文件。 由于文件夹内有二三十份xls文件,如果一个个打开xls文件,另存为xlsm格式,这样操作起来比较费时费力。 LookUpAllFiles outFld '递归法,调用自身 Next End Sub Sub ConvertFile(filepath As String) '将xls文件转化为xlsm Private Sub UserForm_Initialize() '窗口初始化 TextBox1.Text = "E:\报告模板" End Sub 注意:上述代码将xls文件转化为xlsm
今天在群里找到几位在公司电脑受强监管,不能轻易安装软件的群友来作测试,尝试使用一个xlsm文件的方式,使用VBA的方式实现将嵌入在xlsm文件里的安装包(已经打包成一个zip文件),释放出来后,再进行解压至指定位置的方式完成安装操作 不能直接嵌入的方式,用一个压缩包,让用户主动去解压,然后再运行xlsm文件,可能更合理些,若EasyShu因为公司管控不能安装的朋友们,如果急切需要的话,可以留言让笔者知道急迫性,会再增加一些开发探索的时间来攻克它
本例中,要合并的工作簿放置在同一文件夹中,为方便描述,这些工作簿名称和其要合并的数据工作表如下(假设要合并的工作簿有3个): “工作簿1.xlsm”中的工作表“完美Excel” “工作簿2.xlsm”中的工作表 “excelperfect” “工作簿3.xlsm”中的工作表“微信公众号” 这些工作表都有相同的列标题,但是数据行数不同。 要求: 1.将这些工作簿中的工作表合并到名为“合并.xlsm”工作簿的工作表“数据”中。 2.在“合并.xlsm”工作簿工作表“数据”的列F中,放置对应行数据来源工作簿工作表名,例如如果数据行2中的数据来自工作表“完美Excel”,则在该行列F单元格中输入“完美Excel”。 3.要合并的工作簿工作表,例如工作簿1.xlsm中的“完美Excel”数据发生变化后,在“合并.xlsm”工作表中运行代码后,会清除“数据”工作表中原先的数据并重新合并上述工作簿中的工作表数据。
标签:VBA,加载宏 在“.xlsm”文件及其转换为的加载项文件“.xlam”之间来回切换并不是一件很容易的事。 下面是www.wimgielis.com中提供的一个示例,在Personal.xlsb(个人宏工作簿)中,还添加了五个过程在xlsm版本(主要用于开发)和xlam版本(主要用来测试和使用)之间切换: Addin_SAVE_AS :将xlsm保存为xlam,不再打开xlsm版本 Addin_INSTALLED:安装xlam版本,不再打开xlsm版本 Addin_NO_Addin:卸载xlam版本,xlsm版本也不再打开 Addin_UNINSTALLED :卸载xlam版本,将打开xlsm版本 Addin_TOGGLE_VISIILITY:使xlam版本可见或不可见 可以在原网站搜索并下载示例代码工作簿。 下面是4个程序代码: Const Addin_FileName As String = "Menu_Test.xlsm" ' 在文件及其加载项对应文件之间切换的过程 Sub Addin__SAVE_AS
『WPS二次开发最新成果』使用外部程序/VSTO插件执行JSA宏 外部程序/VSTO插件执行JSA宏,可以将JSA宏保存到xlsm文件里,但更好的方式是保存到xlam文件里,用户更无感它的存在。 在RPA方案里,这个就简单,直接做好一个xlsm模板文件存放到资源文件里,这个xlsm模板文件预先已经存储了JSA宏代码,从那里复制一个文件再加工就可以了。 一开始笔者想到的方案是将当前工作薄另存为xlsm(如果当前工作薄不是xlsm文件时),然后打开压缩包,在里面修改JSA宏的文件。 经过多翻测试,直接另存为xlsm,因为没有打开宏编辑器添加过代码,所以不会出现这个文件。 经过以上三步操作,重新将解压后的xlsx文件进行zip压缩后,改后缀名为xlsm,使用WPS表格打开后,即可将JSA宏代码加载进文件中并可使用。 如果还想在工作表上,将形状绑定这个JSA宏代码呢?
例如,如果要引用Book1.xlsm的Sheet1中的单元格A1,完全限定引用与上一节所示的基本语法非常相似: Application.Workbooks(“Book1.xlsm”).Worksheets 下面的屏幕截图让你更好了解数字编号分配的过程: 例如,如果想使用该语法引用单元格A2,则合适的引用是: Cells(16385) 对工作簿Book.xlsm的工作表Sheet1中单元格A2的完全限定引用是 例如,下面的语句返回Book1.xlsm的工作表Sheet1中的所有单元格: Application.Workbooks("Book1.xlsm").Worksheets("Sheet1").Cells 下面的示例语句返回Book1.xlsm的工作表Sheet1中单元格A1: Application.Workbooks("Book1.xlsm").Worksheets("Sheet1").Range(" ("Book1.xlsm").Worksheets("Sheet1").Range("A1:D10").Cells(8,2) 或: Application.Workbooks("Book1.xlsm")
假设想要处理工作簿“Book1.xlsm”中名为“Sheet1”的工作表,两种方法的引用如下: 1.使用对象名称: Application.Workbooks(“Book1.xlsm”).Worksheets 对于Book1.xlsm中工作表Sheet1的单元格A1,完整限定的引用是: Application.Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”). (“Book1.xlsm”).Worksheets(“Sheet1”). 或者,如果对Book1.xlsm的Sheet1使用完全限定的引用,语法如下: Application.Workbooks("Book1.xlsm").Worksheets("Sheet1"). 可以创建使用方括号的引用如下: [B1:B10 A5:C5] 对Book1.xlsm的Sheet1使用完全限定的引用如下: Application.Workbooks("Book1.xlsm").Worksheets
xlwings会帮助你创建.xlsm和.py两个文件,在.py文件里写python代码,在.xlsm文件里点击执行,就完成了excel与python的交互。 怎么创建这两个文件呢? 创建好后,在指定文件夹里会出现两个文件,就是之前说的.xlsm和.py文件。 我们打开.xlsm文件,这是一个excel宏文件,xlwings已经提前帮你写好了调用Python的VBA代码。 vbTextCompare) - 1)) RunPython "import " & mymodule & ";" & mymodule & ".main()"End Sub 里面这串代码主要执行两个步骤: 1、在.xlsm if __name__ == "__main__": xw.Book("PythonExcelTest.xlsm").set_mock_caller() main() 然后在.xlsm文件 if __name__ == "__main__": xw.Book("PythonExcelTest.xlsm").set_mock_caller() main() 好了,这就是在excel
win32com.client.Dispatch("Excel.Application") #实例化Excel应用程序 wb =xl.Workbooks.Open(r'D:\test\pythonrunvba.xlsm ') xl.Application.Run('pythonrunvba.xlsm! xl.Application.Quit() 为了调用VBA宏,使用了xl.Application.Run()方法,其中的参数指示要运行的宏: xl.Application.Run('pythonrunvba.xlsm 模块1.mymacro("完美Excel")') 其中: 1.pythonrunvba.xlsm!:包含VBA的文件,这里不需要包括完整路径。 2.模块1:包含宏的模块名。 如果VBA宏不接受任何参数,只需包括宏名而无须括号,例如: xl.Application.Run('pythonrunvba.xlsm!
当前版本的XLMMacroDeobfuscator支持xls、xlsm和xlsb格式。 该工具使用了xlrd2、pyxlsb2和其自带的解析器来相应地从xls、xlsb和xlsm文件中提取单元数据以及其他信息。 你可以在xlm-macro-lark.template查看XLM语法。 XLMMacroDeobfuscator可以在任意操作系统上运行,并正常来相应地从xls、xlsb和xlsm文件中提取和解析XLM宏文件,而无需安装Microsoft Excel。 仅获取反混淆处理后的宏而不进行其他格式化处理: xlmdeobfuscator --file document.xlsm --no-indent --output-formula-format "[[ INT-FORMULA]]" 以JSON格式导出输出数据: xlmdeobfuscator --file document.xlsm --export-json result.json 如需查看JSON
从2007版本开始,Excel一般的文件后缀由原来的.xls修改为.xlsx,而对于有VBA代码的文件,需要保存为.xlsm类型,所以,在碰到的上图提示,需要点击否,选择保存类型: ? 这样相当于另存了一个.xlsm后缀的文件,文件的图标和一般的也是不一样的: ? 右下角多了一个感叹号! 所以,如果你知道自己需要在文件中使用VBA代码,记得一定要另存为.xlsm后缀的文件。
『WPS二次开发最新成果』使用外部程序/VSTO插件执行JSA宏 外部程序/VSTO插件执行JSA宏,可以将JSA宏保存到xlsm文件里,但更好的方式是保存到xlam文件里,用户更无感它的存在。 在RPA方案里,这个就简单,直接做好一个xlsm模板文件存放到资源文件里,这个xlsm模板文件预先已经存储了JSA宏代码,从那里复制一个文件再加工就可以了。 一开始笔者想到的方案是将当前工作薄另存为xlsm(如果当前工作薄不是xlsm文件时),然后打开压缩包,在里面修改JSA宏的文件。 经过多翻测试,直接另存为xlsm,因为没有打开宏编辑器添加过代码,所以不会出现这个文件。 经过以上三步操作,重新将解压后的xlsx文件进行zip压缩后,改后缀名为xlsm,使用WPS表格打开后,即可将JSA宏代码加载进文件中并可使用。 如果还想在工作表上,将形状绑定这个JSA宏代码呢?
Workbooks(“工作簿完整名称”) 工作簿对象workbook对象的名称,即excel文件的名称都是不重复的,引用时需要工作簿的完整名称,包括文件后缀名(要注意后缀的不同,带有宏的excel文件为xlsm Workbooks("vba.xlsm").Worksheets.Count表示统计vba.xlsm工作簿对象的普通工作表的数量,在引用工作簿对象时,表示方法为:Workbooks("vba.xlsm" 当前代码所在的工作簿的名称为vba.xlsm。 ---- 今天下雨 本节主要介绍了工作簿对象的引用方法。内容之前已经有很多相似之处,后续会介绍工作簿对象常用的属性和方法。祝大家学习快乐。 ----
『WPS二次开发最新成果』使用外部程序/VSTO插件执行JSA宏 外部程序/VSTO插件执行JSA宏,可以将JSA宏保存到xlsm文件里,但更好的方式是保存到xlam文件里,用户更无感它的存在。 在RPA方案里,这个就简单,直接做好一个xlsm模板文件存放到资源文件里,这个xlsm模板文件预先已经存储了JSA宏代码,从那里复制一个文件再加工就可以了。 一开始笔者想到的方案是将当前工作薄另存为xlsm(如果当前工作薄不是xlsm文件时),然后打开压缩包,在里面修改JSA宏的文件。 经过多翻测试,直接另存为xlsm,因为没有打开宏编辑器添加过代码,所以不会出现这个文件。 经过以上三步操作,重新将解压后的xlsx文件进行zip压缩后,改后缀名为xlsm,使用WPS表格打开后,即可将JSA宏代码加载进文件中并可使用。 如果还想在工作表上,将形状绑定这个JSA宏代码呢?
Dim wb As Workbook ' 选择要修复的文件 filePath = Application.GetOpenFilename("Excel Files (*.xlsm ), *.xlsm", , "选择要修复的XLSM文件") IffilePath = "False"ThenExitSub Application.ScreenUpdating True wb.Windows(1).WindowState = xlNormal ' 保存修复后的文件 tempPath = Replace(filePath, ".xlsm ", "_REPAIRED.xlsm") wb.SaveAstempPath, FileFormat:=xlOpenXMLWorkbookMacroEnabled wb.CloseFalse ("00:00:01") DoEvents ' 生成带时间戳的备份文件名 backupPath = Replace(ThisWorkbook.FullName, ".xlsm
-“粘贴”—“关闭文件”的工作化为“一键完成” 问题1:一键复制模板文件并按D列“惟一性”命名 问题2:分别筛选出相应的数据并写入到相应文件中,如:把“初中语文1组”的相应的数据填写到“初中语文1组.xlsm ”文件中,把“小学数学1组”的相应的数据填写到“小学数学1组.xlsm”文件中, ====这是开始的两个文件======== =====代码在“控制文件.xlsm”中===== 代码如下: Sub f_num Dim arr, brr Dim d As Object f_num = 4 pa = ThisWorkbook.path mfile = pa & "\模板.xlsm End With brr = d.keys For i = 0 To UBound(brr) FileCopy mfile, topath & brr(i) & ".xlsm = crr_i + 1 End If Next j Set wb = Workbooks.Open(topath & brr(i) & ".xlsm
Workbooks("vba.xlsm").Close 是关闭了单个工作簿vba.xlsm,而workbooks.close则是关闭所有打开的工作簿。 示例保存关闭工作簿 下面以保存并关闭vba.xlsm文件为例。 Workbooks("vba.xlsm").Close savechanges:=True通过简单的代码,可以实现直接保存之后关闭excel文件。 举例如下: ThisWorkbook.Name返回示例中代码所在工作簿名称为“工作簿1.xlsm”。 而ActiveWorkbook.Name返回当前代码所在的工作簿名称为“vba.xlsm” ---- 本节主要介绍工作簿对象的常用方法,后续会介绍application对象的属性和方法,以及事件等内容等
xlwings会帮助你创建.xlsm和.py两个文件,在.py文件里写python代码,在.xlsm文件里点击执行,就完成了excel与python的交互。 怎么创建这两个文件呢? 创建好后,在指定文件夹里会出现两个文件,就是之前说的.xlsm和.py文件。 我们打开.xlsm文件,这是一个excel宏文件,xlwings已经提前帮你写好了调用Python的VBA代码。 - 1)) RunPython "import " & mymodule & ";" & mymodule & ".main()" End Sub 里面这串代码主要执行两个步骤: 1、在.xlsm if __name__ == "__main__": xw.Book("PythonExcelTest.xlsm").set_mock_caller() main() 然后在.xlsm if __name__ == "__main__": xw.Book("PythonExcelTest.xlsm").set_mock_caller() main() 好了,这就是在