2

编辑:我根据评论更新了我的代码,但得到了相同的症状。

编辑 2:我再次更新了代码,我知道它适用于 .xlsx 文件的目录。如果我将所有 .xlsm 文件转换为 .xlsx 文件以删除宏/代码,那么代码效果很好。这个问题很可能过于局部化。

今天早些时候,我学习了如何遍历 .xlsx 文件的文件夹并将每张工作表导出到制表符分隔的 .txt 文件。我更大的目标是遍历一个包含 .xlsm 文件的文件夹(我的机器上的宏并不全部)并将数据工作表写入 .txt 文件。

这是修改后的代码。

Sub exportsSheetsToTextForAll()

    Application.AutomationSecurity = msoAutomationSecurityForceDisable

    excelFiles = Dir(ThisWorkbook.Path & "\" & "Payout data*.xlsm")
    fromPath = ThisWorkbook.Path

    Do While Len(excelFiles) > 0
        Debug.Print Files
        Set oWb = Workbooks.Open(Filename:=fromPath & "\" & excelFiles)
        Application.Run "exportSheetsToText", oWb
        oWb.Close SaveChanges:=False
        excelFiles = Dir
    Loop

End Sub

Sub exportSheetsToText(iWb As Workbook)

    For Each ws In iWb.Worksheets
        ws.Copy
        Set wb = ActiveWorkbook
        textFile = Left(iWb.FullName, InStr(iWb.FullName, ".") - 1) & "-" & ws.Name & ".txt"
        wb.SaveAs Filename:=textFile, FileFormat:=xlText
        wb.Close SaveChanges:=False
    Next ws
End Sub

由于 .xlsm 文件的结构,我修改了第一个问题的答案。每个 .xlsm 文件都有一个数据查询工作表(“REQUEST_TABLE”),其中包含用于查询条目的单元格和用于宏的按钮。运行查询会生成包含我要导出的数据的新工作表(“Sheet1”、“Sheet2”等)。

当我运行exportAllSheetsToText()宏时,它会打开第一个工作表,但它从数据查询工作表(“REQUEST_TABLE”)开始,将其保存到制表符分隔的文本文件中,然后停止而不是继续浏览所有工作表。我认为宏会像我原来的宏一样遍历所有工作表,用于循环目录中的所有工作簿和工作表。

当我在 .xlsm 文件上运行宏时会发生什么变化?我是否需要先将这些工作表剥离到它们自己的 .xlsx 文件中?谢谢!

4

0 回答 0