【发布时间】: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,看看会产生什么效果。