将.xlsx工作簿中的工作表导出到制表符分隔的.txt文件的宏将无法与.xlsm工作簿一起使用

时间:2013-04-12 21:12:39

标签: excel-vba vba excel

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

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

Earlier today我学会了如何遍历.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文件中?谢谢!

0 个答案:

没有答案