我目前正在尝试使用excel宏,并且可能没有轻松入手。 我想将一个文件夹中的所有.csv文件中的特定列(始终是相同的列字母)导入到一个Excel工作表中。因此目前有两列感兴趣,我希望每个csv列都有一个工作表,所有文件都是新的excel列。因此,带有两个.csv列的50个csv文件将导致一个excel文件,每个文件包含两个页面和50个列。 我已经尝试了一些东西,宏目前看起来如下。它是从目录中获取所有.csv文件,然后从第2行选择列B到使用的行数并复制它,然后切换到excel文件并将其粘贴到设置标题的下一个空列中作为.csv文件名和下面粘贴的所有数据。为.cs列F完成相同的操作。之后应该关闭.csv文件,然后打开下一个文件,直到处理完目录文件为止。 目前宏在第27行失败: 视窗(f.Name).Activate 给'运行时错误9 - 索引超出范围'
Sub csv_imp()
'
' csv_imp Makro
'
' Tastenkombination: Strg+r
'
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim xl As New Excel.Application
Dim wb As New Excel.Workbook
Dim lastColumn
Dim folder
Dim rng As Range
Dim res As Workbook
Dim target As Range
Set folder = fso.getFolder("C:\data\")
Set res = Workbook("Results")
Set lastColumn = 0
For Each f In folder.Files
Debug.Print f.Name
If (f.Name Like "*.csv") Then
Set rng = Range("B2:B60")
rng.Copy
Windows("Results").Activate
Set wb = xl.Workbooks.Open(f.Path)
wb.Sheets(1).Range(ColumnLetter(lastColumn + 1) & "1").Value = f.Name
Set target = wb.Sheets(1).Range(ColumnLetter(lastColumn + 1) & "2")
target.Paste
lastColumn = lastColumn + 1
wb.Save
f.Close
End If
Next
xl.Quit
End Sub
Function ColumnLetter(ByVal ColumnNumber As Long) As String
Dim n As Long
Dim c As Byte
Dim s As String
n = ColumnNumber
Do
c = ((n - 1) Mod 26)
s = Chr(c + 65) & s
n = (n - c) \ 26
Loop While n > 0
ColumnLetter = s
End Function
如果有人可以提供帮助,那就太棒了:) SEB