如何使excel在每次保存xlsx时自动导出工作表的txt副本?

如何使excel在每次保存xlsx时自动导出工作表的txt副本?,excel,vba,Excel,Vba,我使用excel编辑表格数据,并使用版本控制跟踪更改。每次更改xls(x)时,我都必须转到文件->导出,然后excel将继续编辑导出的文件,而不是xls(x) 我希望excel在每次保存xls(x)工作表时自动导出工作表的文本版本,并继续编辑xls(x)。我如何做到这一点 编辑: 我将文件保存为启用宏的文件(xlsm),启用宏,并按照John Coleman的建议,将以下代码()插入VBAPProject->ThisWorkbook: Private Sub Workbook_BeforeSa

我使用excel编辑表格数据,并使用版本控制跟踪更改。每次更改xls(x)时,我都必须转到文件->导出,然后excel将继续编辑导出的文件,而不是xls(x)

我希望excel在每次保存xls(x)工作表时自动导出工作表的文本版本,并继续编辑xls(x)。我如何做到这一点


编辑:

我将文件保存为启用宏的文件(xlsm),启用宏,并按照John Coleman的建议,将以下代码()插入VBAPProject->ThisWorkbook:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Application.DisplayAlerts = False
    Dim s As String
    s = ActiveWorkbook.FullName
    s = Replace(s, "xlsm", "txt")
    ActiveWorkbook.SaveAs Filename:=s, FileFormat:=xlText
    Application.DisplayAlerts = True

End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Dim sh As Worksheet
    Set sh = Application.ActiveSheet

    Dim s As String
    s = ActiveWorkbook.FullName
    s = Replace(s, "xlsm", "txt")

    Dim wb As Workbook
    Set wb = Application.Workbooks.Add
    sh.Copy After:=wb.Sheets(wb.Sheets.Count)

    wb.SaveAs Filename:=s, FileFormat:=xlText, CreateBackup:=False
    wb.Close

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

End Sub

但活动工作簿变成txt文件(excel随后立即崩溃)。是否有方法导出并继续编辑原始文件?

将文件另存为启用宏的文件(xlsm),启用宏,转到“开发人员”->“Visual Basic”,并将以下代码插入VBAPProject->此工作簿:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Application.DisplayAlerts = False
    Dim s As String
    s = ActiveWorkbook.FullName
    s = Replace(s, "xlsm", "txt")
    ActiveWorkbook.SaveAs Filename:=s, FileFormat:=xlText
    Application.DisplayAlerts = True

End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Dim sh As Worksheet
    Set sh = Application.ActiveSheet

    Dim s As String
    s = ActiveWorkbook.FullName
    s = Replace(s, "xlsm", "txt")

    Dim wb As Workbook
    Set wb = Application.Workbooks.Add
    sh.Copy After:=wb.Sheets(wb.Sheets.Count)

    wb.SaveAs Filename:=s, FileFormat:=xlText, CreateBackup:=False
    wb.Close

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

End Sub

将导出代码放入事件处理程序
工作簿\u BeforeSave()
@JohnColeman我在
此工作簿
模块中遇到上述错误应该有一个存根,您可以调用它:
私有子工作簿\u BeforeSave()(ByVal SaveAsUI作为布尔值,Cancel作为布尔值)
请参见:@JohnColeman这似乎部分起作用:活动工作簿变成txt文件。有没有办法导出并继续编辑原始文件?我不太清楚您的要求是什么——保存不会关闭工作簿,以后您仍然可以进行编辑。可能会将
Cancel=True
放在事件处理程序的主体中,但如果执行此路径,则必须找到绕过事件处理程序的方法(或者可能有一个公共布尔标志,事件处理程序会检查该标志以确定是否真的要保存)。