编辑:我根据评论更新了我的代码,但症状相同。
编辑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文件中?谢谢!