目前,当我打开我的xlsm文件时,它会将标题中的名称更改为testing.xlsx,并在桌面上创建一个备份文件,这不是我想要做的。我想要的只是打开xlsm文件,它创建一个备份文件testing.xlsx然后如果我对xlsm文件进行更改,它应该更新testing.xlsx文件中的那些应该是宏免费的更改,并且保存的更改应该保存在xlsm文件中,目前它们没有被保存。
此外,如果我关闭xlsm文件而没有点击保存它应该保存自己和备份而不提示。
这是代码
Private Sub Workbook_Open()
Application.ScreenUpdating = False
ThisWorkbook.CheckCompatibility = False
Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:="C:\Users\root\Desktop\testing.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ThisWorkbook.CheckCompatibility = False
'ThisWorkbook.SaveAs Filename:="C:\Users\root\Desktop\testing.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ThisWorkbook.Save
End Sub
我不是vba专家,并且花了很多时间试图解决这个问题。所以在这里寻求一些帮助。
答案 0 :(得分:0)
我不完全确定我完全得到了这个问题,但我认为您创建.xlsx文件的原因是因为您在以下位置指定了该扩展名:
ThisWorkbook.SaveAs Filename:="C:\Users\root\**Desktop**\testing**.xlsx**", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
当工作簿打开时,您将禁用屏幕更新,兼容性检查和警报,然后将打开的工作簿保存为“\ root \ Desktop”上的.xlsx文件,这可能是您的桌面。
在关闭之前你再次禁用一些东西我希望你在某些时候重新启用(例如ScreenUpdating - 这些应用程序变量在你的例程的生命周期中存活),然后将工作簿保存到你之前保存的目录中它(例如作为.xslx文件)除非你在它们之间的某个点重新保存它,否则你只需要保存文件的格式与Workbook_Open事件保存时的格式相同。
通常情况下,您会收到警告,说工作簿中有宏等,您可能不想将其另存为.xlsx,但是您DisableAlert
[编辑]
这不是优雅的代码,但它应该完成这项工作:
Option Explicit
Private Sub Workbook_Open()
Application.ScreenUpdating = False
ThisWorkbook.CheckCompatibility = False
Application.DisplayAlerts = False
on error resume next
ThisWorkbook.SaveCopyAs Filename:="C:\Users\root\Desktop\testingbckup.xlsm"
Application.ScreenUpdating = True
ThisWorkbook.CheckCompatibility = True
Application.DisplayAlerts = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ThisWorkbook.CheckCompatibility = False
ThisWorkbook.Save
Application.ScreenUpdating = True
Application.DisplayAlerts = True
ThisWorkbook.CheckCompatibility = True
End Sub
Sub printActiveWorkbookPath()
Debug.Print ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
End Sub
或以下通常没有问题:
Private Sub Workbook_Open()
Application.DisplayAlerts = False
'This simply suprresses the error - it does not try to handle it - achieves the same
'effect as clicking "End" when the error message box pops up
on error resume next
ThisWorkbook.SaveCopyAs Filename:="C:\Users\root\Desktop\testingbckup.xlsm"
Application.DisplayAlerts = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
End Sub