Извлечение данных Excel в файл с разделителями каналов – Как обратиться к другой книге

Я работаю над созданием файла excel, который включает только кнопку, которая при нажатии на нее извлекает все другие файлы excel в указанном (теперь только жестко закодированном) каталоге в файлы с расширением .txt. В прошлом я занимался некоторыми программированием, но я не очень хорошо знаком с VBA, поэтому обычно работаю, занимаясь поиском и повторным использованием учебников и тому подобных.

Основное, что я хочу сделать, это: – Прокрутка по определенному каталогу. – Для каждого файла xls / xlsx создайте отдельный .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 

Проблема в том, что цикл «Для каждого» проходит через книгу, в которой запущен макрос, а не тот, который открывается. Я экспериментировал с настройкой этой книги, но я не могу заставить ее работать. Может ли кто-нибудь помочь мне установить это право?

Создайте ссылку на рабочий лист в открытой книге:

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

Затем используйте переменные Range/Row/Cell ... в следующем коде, чтобы предотвратить «голый» Range по ActiveWorkbook для 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 . Чтобы установить разделитель, отличный от табуляции, запятой или точкой с запятой, я устанавливаю для параметра Other и OtherChar значение Other:=True, OtherChar:=">" .

Это сработало для меня; возможно, он будет работать так же хорошо для OtherChar:="|" ?

Давайте будем гением компьютера.