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

VBA -无法从"xlsm“保存为"xlsx”

在 VBA 中,将一个启用了宏的 Excel 文件(.xlsm)保存为一个普通的 Excel 文件(.xlsx)时,可能会遇到一些问题。以下是一些常见的原因和解决方法:

常见问题

  1. 宏和代码.xlsx 文件格式不支持宏和 VBA 代码。如果你的工作簿中包含宏或 VBA 代码,保存为 .xlsx 时这些内容将会丢失。
  2. 保护工作簿:如果工作簿或工作表受到保护,可能会导致保存失败。
  3. 文件路径和权限:确保目标路径存在且你有写入权限。

解决方法

以下是一个示例代码,展示如何将 .xlsm 文件保存为 .xlsx 文件:

代码语言:javascript
复制
Sub SaveAsXLSX()
    Dim wb As Workbook
    Dim newFilePath As String

    ' 获取当前工作簿
    Set wb = ThisWorkbook

    ' 设置新的文件路径
    newFilePath = "C:\Path\To\Your\NewFile.xlsx"

    ' 保存为 .xlsx 文件
    Application.DisplayAlerts = False ' 禁用警告
    wb.SaveAs Filename:=newFilePath, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True ' 启用警告

    ' 提示保存成功
    MsgBox "文件已成功保存为 .xlsx 格式!", vbInformation
End Sub

详细步骤

  1. 获取当前工作簿
    • 使用 ThisWorkbook 获取当前工作簿对象。
  2. 设置新的文件路径
    • newFilePath 设置为你希望保存的新文件路径和文件名。
  3. 保存为 .xlsx 文件
    • 使用 wb.SaveAs 方法保存工作簿为 .xlsx 格式。
    • FileFormat:=xlOpenXMLWorkbook 指定文件格式为 .xlsx
    • 使用 Application.DisplayAlerts = False 禁用警告,以避免覆盖现有文件时的提示。
    • 保存完成后,使用 Application.DisplayAlerts = True 重新启用警告。
  4. 提示保存成功
    • 使用 MsgBox 提示用户文件已成功保存。

注意事项

  • 路径和文件名:确保 newFilePath 中的路径和文件名是有效的,并且你有写入权限。
  • 宏和代码丢失:保存为 .xlsx 文件时,所有的宏和 VBA 代码将会丢失。如果你需要保留这些内容,请确保在保存前备份原文件。
  • 保护工作簿:如果工作簿或工作表受到保护,可能需要先取消保护再进行保存。

处理错误

为了更好地处理可能出现的错误,可以添加错误处理代码:

代码语言:javascript
复制
Sub SaveAsXLSX()
    On Error GoTo ErrorHandler

    Dim wb As Workbook
    Dim newFilePath As String

    ' 获取当前工作簿
    Set wb = ThisWorkbook

    ' 设置新的文件路径
    newFilePath = "C:\Path\To\Your\NewFile.xlsx"

    ' 保存为 .xlsx 文件
    Application.DisplayAlerts = False ' 禁用警告
    wb.SaveAs Filename:=newFilePath, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True ' 启用警告

    ' 提示保存成功
    MsgBox "文件已成功保存为 .xlsx 格式!", vbInformation

    Exit Sub

ErrorHandler:
    Application.DisplayAlerts = True ' 确保警告被重新启用
    MsgBox "保存文件时出错:" & Err.Description, vbCritical
End Sub

通过这些步骤和注意事项,你应该能够成功地将 .xlsm 文件保存为 .xlsx 文件。希望这些信息能帮助你解决问题。

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

相关·内容

  • Win10:右键新建选项中添加启用宏的工作簿.xlsm

    文章背景:工作生活中涉及到VBA,时常要将Excel文件保存为.xlsm格式。而在右键新建的可选项中,一般只有.xlsx文件。下面介绍如何在右键新建选项中添加启用宏的工作簿.xlsm。...路径:计算机\HKEY_CLASSES_ROOT.xlsm (3)在.xlsm文件夹上点击右键,依次选择新建、项,并重命名为:shellnew。...(5)在注册表中,找到.xlsx 文件夹,找到Excel.Sheet.12文件夹下的ShellNew文件夹,双击FileName打开,复制其中的数值数据:C:\Program Files\Microsoft...Office\Root\VFS\Windows\ShellNew\excel12.xlsx。...(6)回到.xlsm文件夹,点击新建的shellnew文件夹,双击FileName打开,将刚才复制的内容填到数值数据中,并将最后的ecxel12.xlsx 改为 excel14m.xlsm

    3.7K10

    VBA代码:拆分工作簿示例——将工作簿中的每个工作表保存为单独的工作簿

    标签:VBA 有时候,我们想将工作簿中的每个工作表都保存为一个单独的工作簿。 你可以使用下面的操作逐个保存工作表: 1.在工作表标签中单击右键。 2.选取“移动或复制…”命令。...然而,如果存在很多个工作簿,这样的重复工作使用VBA是最合适的。...(UBound(arr)) Select Case strExtension Case "xlsb":lngFileFormatCode = 50 Case "xlsx...":lngFileFormatCode = 51 Case "xlsm":lngFileFormatCode = 52 Case "xls": lngFileFormatCode...Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub 只需在要拆分的工作簿中运行上述代码,就可将该工作簿中的所有工作表全部保存为单独的工作簿

    4K11

    Workbook工作簿对象基础

    后缀,普通表为xlsx后缀。)...Workbooks("vba.xlsm").Worksheets.Count表示统计vba.xlsm工作簿对象的普通工作表的数量,在引用工作簿对象时,表示方法为:Workbooks("vba.xlsm"...2、Workbooks(index索引号) 在工作簿对象引用时,index索引号是工作簿的在任务栏的左至右的顺序(也是工作簿依次打开的顺序。)...电脑打开了三个工作簿,左至右分别是vba,工作簿1,示例表。通过循环来获得三个工作表的名称。...当前代码所在的工作簿的名称为vba.xlsm。 ---- 今天下雨 本节主要介绍了工作簿对象的引用方法。内容之前已经有很多相似之处,后续会介绍工作簿对象常用的属性和方法。祝大家学习快乐。 ----

    2.9K30

    Excel多工作薄合并

    目前还无法单纯通过Excel界面的菜单工具做到,不过经过小魔方的反复研究,目前找到了三种合并的方法!...插件工具(OIIO) VBA代码(别害怕,复制黏贴就行,不用自己写) 数据透视表 由于数据透视表操作步骤相对比较繁琐,以后出数据透视表的教程时会专门来讲。...VBA宏代码: ▼ 这个宏代码是论坛上的Excel高手提供的,利用宏代码的好处就是不用加载插件,一劳永逸。...),*.xlsx", MultiSelect:=True, Title:="合并工作薄") X = 1 While X <= UBound(FileOpen) Workbooks.Open Filename...当然含有宏代码的工作薄文件需要保存成特殊的格式(.xlsm) 选择文件——另存为——保存类型——excel启用宏的工作薄(xlsm)。 ?

    1.3K60

    用Python处理Excel的资源

    用Python处理Excel的资源 python-excel[1] 读写Excel文件 openpyxl openpyx文档l[2] • 读写Excel2010文件(即xlsx) openpyxl示例:...") xlsxwriter xlsxwriter[3] 用于以 Excel 2010 格式(即.xlsx)写入数据、格式化信息以及图表。...pylightxl 读取 xlsxxlsm 文件,写入 xlsx 文件。 xlrd 读取旧版 Excel 文件(即:.xls)中的数据和格式信息的。...编写Excel插件(VBA替代) xlwings xlwings[4] 是一个开源库,用 Python 自动化 Excel,并在 Windows 和 macOS 上运行:您可以 Excel 调用 Python...PyXLL PyXLL[5] 是一款商业产品(29刀/月),可以用Python编写 Excel 插件,无需 VBA。Python 函数可以公开为工作表函数(UDFs)、宏、菜单和功能区工具栏。

    10910

    文科生也能学会的Excel VBA 宏编程入门(三)——合并文件

    因此,这一次我们就通过VBA程序完成这个任务,从此妈妈再也不担心我数数到头秃。...程序基本思路 将要合并的Excel文件放到同一个文件夹中; 在文件夹中新建一个Excel文件用于汇总并运行VBA程序; 通过VBA程序获取这个文件夹中所有文件的路径; 依次通过程序自动打开各个文件,并将数据复制粘贴到汇总表中...VBA编程 文件目录如下: 其中1.xlsx和2.xlsx的内容如下: 打开“合并.xlsm”文件,依次点击【开发工具】→【Visual Basic】,【右键】【插入模块】进入编程页面...,并用wb这个变量记住它,免得程序找不到 Num = Num + 1 For G = 1 To Sheets.Count '第一个...然后End(xlUp)是65536行开始向上Up寻找第一个不为空的行,.Row就是获取这行的行号。相应的,还有End(xlDown),End(xlToLeft)这种亲戚。

    3.6K30

    这些掌握了,你才敢说自己懂VBA

    于是,我准备把Excel VBA写成一个系列免费教程,撸完这个系列你也是VBA界的黑山老妖了。...不错,用公式确实能够实现上述案例的结果,但是,VBA拥有公式无可比拟的优越性: 第一,公式无法使用「按钮控件」; 第二,日常的工作场景一般会涉及加减乘除等综合运算,如果我们使用公式就会格外的复杂而难以控制...那VBA如何操作呢?...宏(Macro):简单理解就是一段用VBA编写的小程序 (4)修改宏名「加减法」,点击「新建」 (5)自动弹出界面,进入了VBA代码编辑器 上次介绍了什么是VBA以后,我们知道多数代码放置在标准代码...弹窗出现提示,我们点击「否」,在「保存类型」中选择「Excel启用宏的工作簿(*.xlsm)」 要点注意: a.文件报错为「.xlsm」,而不是「.xlsx」 (13)点击「按钮1」,我们就可以查看结果

    45830

    《Python for Excel》读书笔记连载17:使用读写器包进行Excel文件操作(上)

    例如,要读取xlsx文件格式,必须使用OpenPyXL包: 表8-1.何时使用哪个包 如果要写入xlsxxlsm文件,需要在OpenPyXL和XlsxWriter之间做出选择。...例如,Excel文件的大小往往会随着时间的推移而增大,许多用户通过将文件格式xlsx切换到xlsb来解决这一问题,因为这可以大大减小文件大小。...例如,v3.0.5版本起,OpenPyXL将重命名图表并删除其标题。...下面是一个简单的编辑示例: 如果要编写xlsm文件,OpenPyXL必须处理一个需要加载的现有文件,并将keep_vba参数设置为True: 示例文件中的按钮正在调用显示消息框的宏。...首先,需要从Anaconda提示符上的现有Excel文件中提取宏代码(示例使用macro.xlsm文件,可以在配套文件的xl文件夹中找到该文件): 对于Windows,首先切换到xl目录,然后找到vba_extract.py

    3.8K20

    python中常⽤的excel模块库

    python中常用的excel模块库&安装方法 openpyxl openpyxl是⼀个Python库,用于读取/写⼊Excel 2010 xlsx / xlsm / xltx / xltm⽂件。...xlwings xlwings是BSD许可的 Python库,可轻松Excel调用Python,同样也可在python中轻易调用excel。...它使用了⼲净且功能强⼤的Python代码替换VBA宏,可以同时⽀持在Windows和Mac上⼯作,同时在Excel和WPS都可兼容使用。 功能⻬全,⽀持Excel的新建、打开、修改、保存。...它无法读取或修改现有的Excel XLSX⽂件。 XlsxWriter已获得BSD 许可证的许可,其源代码可在GitHub上获得。 缺点: 它无法读取或修改现有的Excel XLSX⽂件。...如何安装: python –m pip install tablib xlrd xlrd是⼀个⽤于Excel⽂件(⽆论是.xls还是.xlsx⽂件)读取数据和格式化信息的库。

    2K20

    Excel文件常见格式及其作用

    xls xlsx xlsb xlsm xltx xlam 1,2,3,4,5,6 一共6个格式 这就是我们今天要说的六个Excel格式 xls 这是我刚学习Office时候的格式 那时候还是Excel...在Office 2007发布之后 开始用xlsx格式 这个格式对比xls 1 多了个x 2 行列更多 3 文件体积更小 关于第3点 由于xlsx可能保存了xls所没有的功能 所以xlsx有时候会更大...xlsm 关于这个格式 我们只需要知道 它可以保存Excel文件中的代码就行了 xlsb 关于这个格式 我们同样只需要知道 它可以保存Excel文件中的代码 但是文件体积比xlsm更小 至于功能上有没有其他影响我还没有发现...如果要编辑这个格式的文件 得右键→打开 可以用在票据打印的时候 xlam 这个格式叫'加载宏' 类似于我们常常见到的各种Excel工具箱或Excel内置的数据分析等等 你也可以做一份自己常用的功能文件保存为...xlam文件 加载到自己电脑上的Excel里 以后每次打开就有你独特的功能了 总结一下 来个明细对比表 - xls xlsx xlsm xlsb 最大行 65536 1048576 1048576

    2K20
    领券