【问题标题】:Loop over folder of workbooks and export all sheets to tab-delimited text with Excel VBA使用 Excel VBA 循环工作簿文件夹并将所有工作表导出为制表符分隔的文本
【发布时间】:2013-04-05 05:08:34
【问题描述】:

我拼凑了一个 Excel VBA 脚本,该脚本将打开的工作簿中的所有工作表写入单独的、以制表符分隔的文件(这仍然是“宏”吗?我正在 Excel 真空中学习这个)。它一次在一个工作簿上运行良好。在这里。

Sub exportSheetsToText()
    Dim sWb As String
    Dim sFile As String
    Dim oSheet As Worksheet

    sWb = Left(ActiveWorkbook.FullName, InStr(ActiveWorkbook.FullName, ".") - 1)

    For Each oSheet In Worksheets
        oSheet.Copy
        sFile = sWb & "-" & oSheet.Name & ".txt"
        ActiveWorkbook.SaveAs fileName:=sFile, FileFormat:=xlText
        ActiveWorkbook.Close SaveChanges:=False
        Next oSheet
End Sub

我想扩大它,以便我可以将此宏应用到工作簿文件夹。我写了我认为会遍历每个满足过滤器的工作簿的内容,但它没有写任何 .txt 文件。在这里。

Sub exportsSheetsToTextForAll()

    Dim sPath As String
    Dim sWildcard As String
    Dim sMacro As String
    Dim oWb As Workbook
    Dim oPersWb As Workbook

    Application.AutomationSecurity = msoAutomationSecurityForceDisable
    Set oPersWb = Workbooks("PERSONAL.XLSB")
    sMacro = "'" & oPersWb.Name & "'" & "!exportSheetsToText()"
    sPath = "C:\Users\richard\Documents\Research\Data\Excel\Datastream - payout"
    sWildcard = "New*.xlsx"
    sFile = Dir(sPath & "\" & sWildcard)


    Do While Len(sFile) > 0
        Workbooks.Open Filename:=sPath & "\" & sFile
        Application.Run sMacro
        ActiveWorkbook.Close SaveChanges:=False
        sFile = Dir
    Loop

End Sub

它遍历了我所有的测试文件,但我没有看到任何效果(即没有 .txt 文件,也没有错误)。

最终我将在带有宏的非常大的工作簿上运行它,因此禁用宏很重要(我在本地没有宏,它们位于专用的数据机器上)并在打开之前关闭一个大工作簿下一个。

有什么想法吗?谢谢!

【问题讨论】:

  • 我刚刚给它一个鸟瞰图,因为我现在必须随时离开。不过这里有一个建议...而不是Workbooks.Open Filename:=sPath & "\" & sFile 尝试Set oWB = Workbooks.Open (Filename:=sPath & "\" & sFile) 然后还修改您的宏以将wb 作为参数,以便exportSheetsToText() 变为Sub exportSheetsToText(wb as workbook) 一旦完成。不要使用 exportSheetsToText() 中的 Activeworkbook。请改用wb
  • 是所有文件 xlsx 扩展名为 .xlsx 的文件
  • @Philip - 是的。我从 Windows 资源管理器上下文菜单中创建了一些准系统“新 Microsoft Excel Worksheet.xlsx”文件,并用几列 RAND() 填充它们。
  • @SiddharthRout - 谢谢。我正在研究这些建议。一般来说,当 VBA 需要 ()、何时需要 = 以及何时需要 := 时,我会感到困惑。
  • exportSheetsToText 将始终将文件导出到当前目录,所以也许它们会去到您期望找到它们的地方以外的地方?保存后尝试添加Debug.Print ActiveWorkbook.Path,看看会产生什么效果。

标签: excel vba


【解决方案1】:

@Siddarth 将参数传递给exportSheetsToText() 的想法是关键。我也有一个错误,将宏名称传递给Application.Run。以下工作并且更清洁。

Sub exportsSheetsToTextForAll()

    Application.AutomationSecurity = msoAutomationSecurityForceDisable

    excelFiles = Dir(ThisWorkbook.Path & "\" & "New*.xlsx")
    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

【讨论】:

  • + 1 太棒了!我很高兴看到您自己解决了这个问题!抱歉不能留下来帮助你,因为我不得不带我妈妈去看电影:)
  • @SiddharthRout - 谢谢! :) 别担心。我很快就会回来寻求更多帮助。我无法让它在带有宏的工作簿上运行!不过,我还没有认输。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
相关资源
最近更新 更多