Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File VBA将数据从文件放入Excel工作表_File_Vba_Io - Fatal编程技术网

File VBA将数据从文件放入Excel工作表

File VBA将数据从文件放入Excel工作表,file,vba,io,File,Vba,Io,我得到的file.txt结构如下: "FIRST" a1 b1 c1 d1 a2 b2 c2 c2 "SECOND" e1 f1 e2 f2 "THIRD" g1 h1 “第一” a1 b1 c1 d1 a2 b2 c2 “第二” e1 f1 e2 f2 “第三” G1H1 我的Excel文件中有三张表格:“第一”、“第二”和“第三”。如何使用VBA代码将此数据填充到三张表中?开始录制宏并打开以空格分隔的txt文件。按ctrl+f,分三步查找第一、第二和第三个。将所需范围从活动工作簿复

我得到的file.txt结构如下:

"FIRST" a1 b1 c1 d1 a2 b2 c2 c2 "SECOND" e1 f1 e2 f2 "THIRD" g1 h1 “第一” a1 b1 c1 d1 a2 b2 c2 “第二” e1 f1 e2 f2 “第三” G1H1
我的Excel文件中有三张表格:“第一”、“第二”和“第三”。如何使用VBA代码将此数据填充到三张表中?

开始录制宏并打开以空格分隔的txt文件。按ctrl+f,分三步查找第一、第二和第三个。将所需范围从活动工作簿复制到相应工作表中所需的工作簿

这将为您提供一个录制的宏,您可以重新构造该宏以生成自动代码。也许我可以稍后发布一些代码。您必须添加vba行以读取用于查找secon和third的单元格的行号,以便知道必须复制的范围

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

开始录制宏并打开以空格分隔的txt文件。按ctrl+f,分三步查找第一、第二和第三个。将所需范围从活动工作簿复制到相应工作表中所需的工作簿

这将为您提供一个录制的宏,您可以重新构造该宏以生成自动代码。也许我可以稍后发布一些代码。您必须添加vba行以读取用于查找secon和third的单元格的行号,以便知道必须复制的范围

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

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

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
然后查看阵列并完成您的任务

或者,您可以立即将数据加载到三个单独的数组中,代表三张图纸。
这完全取决于您。

让我知道这是否有用

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

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
然后查看阵列并完成您的任务

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