2012-09-27 41 views
1

我file.txt的结构是这样的:VBA把数据从文件到Excel表

"FIRST" 
a1 b1 c1 d1 
a2 b2 c2 c2 

"SECOND" 
e1 f1 
e2 f2 

"THIRD" 
g1 h1

我在Excel文件中有三个表:“第一”,“第二”和“第三”。如何通过VBA代码将这些数据填充到三张表中?

回答

1

开始录制宏并打开由空格分隔的txt文件。按ctrl + f并分三步找到First,Second和Third。在相应的工作表中将所需的范围从活动工作簿复制到所需的工作簿。

这会给你一个记录的宏,你可以重构自动化代码。也许我可以稍后发布一些代码。您将不得不添加vba行来读取用于查找secon的单元格的行号,以及第三行,以便您知道要复制的范围。

1问题,文件中的列数如图所示????

这里是一个代码。

Sub Macro1() 
Dim startRow As Integer 
Dim endRow As Integer 
Dim wb As Workbook 


Workbooks.OpenText Filename:="D:\file.txt", Origin:=437, startRow:=1, _ 
    DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _ 
    :=True, Tab:=True, Semicolon:=False, Comma:=False, Space:=True, Other _ 
    :=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _ 
    TrailingMinusNumbers:=True 

Set wb = ActiveWorkbook 

Cells.Find(What:="FIRST", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
    False, SearchFormat:=False).Activate 
startRow = ActiveCell.Row + 1 

Cells.Find(What:="SECOND", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
    False, SearchFormat:=False).Activate 
endRow = ActiveCell.Row - 1 

Range("A" & startRow & ":D" & endRow).Copy 
ThisWorkbook.Activate 
Sheets("Sheet1").Select 
Range("A1").Select 
ActiveSheet.Paste 

startRow = endRow + 2 
wb.Activate 

Cells.Find(What:="THIRD", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
    False, SearchFormat:=False).Activate 
endRow = ActiveCell.Row - 1 

Range("A" & startRow & ":D" & endRow).Copy 
ThisWorkbook.Activate 
Sheets("Sheet2").Select 
Range("A1").Select 
ActiveSheet.Paste 

wb.Activate 
startRow = endRow + 2 
endRow = Range("A" & Rows.Count).End(xlUp).Row 

Range("A" & startRow & ":D" & endRow).Copy 
ThisWorkbook.Activate 
Sheets("Sheet3").Select 
Range("A1").Select 
ActiveSheet.Paste 

wb.Close (False) 
End Sub 
3

我仍然认为每行读取文本文件行是最好的方法。 您可以将整个文件加载到数组中并稍后写入条件。

Sub Read_text_File() 

Dim oFSO As New FileSystemObject 
Dim oFS 
Dim sText as String 
Dim vArray 
Dim lCnt as Long 


Set oFS = oFSO.OpenTextFile("c:\textfile.TXT") 


Do Until oFS.AtEndOfStream 
    lCnt = lCnt + 1 
    sText = oFS.ReadLine 
    vArray(lCnt) = sText 
Loop 


End Sub 

然后查看整个数组并做好自己的工作。

或者您可以立即将数据加载到三个单独的数组中,代表三张表。
这完全取决于你。
让我知道这是否有帮助。

相关问题