将 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:UsersvacekDocumentsEFPIA_ProjectExcel_ToolFiles"
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"循环通过运行宏的工作簿,而不是打开的工作簿。我尝试将该工作簿设置为活动,但无法使其工作。谁能帮我解决这个问题?

Dim Sheet1 as Object    
Set Sheet1 = [Object].Application.Workbooks("filename").WorkSheets("Sheet1")

你也可以这样做

我需要做类似的事情,尽管在我的情况下,有问题的分隔符是>的,并且我正在导入一个.txt文件,就好像它是一个.csv一样。

我使用了Workbooks.OpenText方法,参数为 DataType:=xlDelimited .为了设置制表符、逗号或分号以外的分隔符,我将OtherOtherChar参数设置为 Other:=True, OtherChar:=">"

这对我有用;也许它对OtherChar:="|"也一样有效?

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

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

然后在后续代码中使用该变量Range/Row/Cell ...属性,以防止"裸"Range默认为ActiveWorkbook

For Each myRecord In sheet.Range("A1:A" & sheet.Range("A" & sheet.Rows.Count).End(xlUp).Row)
    ...

最新更新