将Excel数据提取到pipe道分隔文件 – 如何引用其他工作簿

我正在创buildexcel文件,其中只包含一个button,当单击该button时,将指定(现在只是硬编码)目录中的所有其他excel文件解压缩到由pipe道分隔的.txt文件中。 我过去做了一些编程,但是我对VBA不太熟悉,所以我通常通过search和重用教程等工作。

基本上,我想要做的是: – 通过特定的目录循环 – 对于每个xls / xlsx文件,创build单独的.txtpipe道分隔同名.txt扩展名.txt扩展名

到目前为止,我得到了这个代码:

Sub Run_Coversion() Dim directory As String Dim fileName As String Dim OutputFile As String Dim myWkBook As Workbook Dim myRecord As Range Dim myField As Range Dim nFileNum As Long Dim sOut As String Const DELIMITER As String = "|" Application.ScreenUpdating = False directory = "C:\Users\vacek\Documents\EFPIA_Project\Excel_Tool\Files\" fileName = Dir(directory & "*.xls*") Do While fileName <> "" Workbooks.Open (directory & fileName) OutputFile = directory & fileName & ".txt" nFileNum = FreeFile Open OutputFile For Output As #1 Set myWkBook = Workbooks(fileName) myWkBook.Sheets("Sheet1").Activate For Each myRecord In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) With myRecord For Each myField In Range(.Cells, Cells(.Row, Columns.Count).End(xlToLeft)) sOut = sOut & DELIMITER & myField.Text Next myField Print #nFileNum, Mid(sOut, 2) sOut = Empty End With Next myRecord End With Workbooks(fileName).Close fileName = Dir() Loop Application.ScreenUpdating = True End Sub 

问题是,“For each”循环遍历运行macros的工作簿,而不是打开的工作簿。 我尝试设置该工作簿的活动,但我无法使其工作。 任何人都可以帮我设置这个权利?

在打开的工作簿中创build对工作表的引用:

 Dim sheet As Worksheet Set sheet = myWkBook.Sheets("Sheet1") 

然后在随后的代码中使用variablesRange/Row/Cell ...属性来防止“裸” Range默认为ActiveWorkbook

 For Each myRecord In sheet.Range("A1:A" & sheet.Range("A" & sheet.Rows.Count).End(xlUp).Row) ... 
 Dim Sheet1 as Object Set Sheet1 = [Object].Application.Workbooks("filename").WorkSheets("Sheet1") 

你也可以这样做

我需要做类似的事情,虽然在我的情况下,问题的分隔符是> ,我正在导入.txt文件,就好像它是.csv。

我使用Workbooks.OpenText方法,使用参数DataType:=xlDelimited 。 要设置除tab或逗号或分号之外的分隔符,我将OtherOtherChar参数设置为Other:=True, OtherChar:=">"

这对我有效; 也许这对OtherChar:="|"也是OtherChar:="|"