Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 7438|回复: 5

[已解决]txt文件批量转excel文件

[复制链接]
发表于 2021-6-8 11:44 | 显示全部楼层 |阅读模式
3学分
求大神帮忙修改一下,用以前的vba代码始终出问题!有代码备注最好,方便学习!Sub test()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set fso = CreateObject("scripting.filesystemobject")
        For Each file In fso.getfolder(ThisWorkbook.Path).Files
           If file.Name Like "*.txt" Then
               Set mytext = fso.opentextfile(file.Path)
               mycontent = mytext.readall
               mytext.Close
               arr = Split(mycontent, vbCrLf)
               Set wb = Workbooks.Add
               wb.Sheets(1).[a1].Resize(UBound(arr, 1)) = arr
               wb.Sheets(1).[a1].CurrentRegion.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
                            FieldInfo:=Array(Array(0, 1), Array(5, 1), Array(10, 1), Array(17, 1), Array(23, 1), _
                            Array(28, 1), Array(31, 1), Array(36, 1), Array(41, 1), Array(48, 1), Array(50, 1)), _
                            TrailingMinusNumbers:=True
               ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "" & Split(file.Name, ".")(0) & ".xlsx"
               ActiveWindow.Close True
           End If
        Next file
    Application.ScreenUpdating =TRUE
    Application.DisplayAlerts =TRUE
End Sub

最佳答案
2021-6-8 11:44
Sub demo()
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False
   Set fso = CreateObject("scripting.filesystemobject")
   Set conn = CreateObject("adodb.connection")
   Set rs = CreateObject("adodb.recordset")
   Path = ThisWorkbook.Path & "\"
   conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='text;HDR=No';Data Source =" & Path

   For Each file In fso.getfolder(ThisWorkbook.Path).Files
      If Not file.Name Like "*.txt" Then GoTo 1
      Sql = "select * from " & file.Name
      rs.Open Sql, conn, 3, 3
      If rs.RecordCount <> 0 Then
          [a1:g5000].ClearContents
         [a1].CopyFromRecordset rs
         [a:a].TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Space:=True
      End If
      rs.Close
      NewFile = Path & Split(file.Name, ".")(0) & ".xlsx"
      ActiveWorkbook.SaveAs Filename:=NewFile, FileFormat:=xlOpenXMLWorkbook
1:
   Next
   Application.ScreenUpdating = True
   Application.DisplayAlerts = True
End Sub



祝順心,南無阿彌陀佛!

测试.zip

231.7 KB, 下载次数: 15

最佳答案

查看完整内容

Sub demo() Application.ScreenUpdating = False Application.DisplayAlerts = False Set fso = CreateObject("scripting.filesystemobject") Set conn = CreateObject("adodb.connection") Set rs = CreateObject("adodb.recordset") Path = ThisWorkbook.Path & "\" conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='text;HDR=No';Data Source =" & Path For Each file In ...
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-6-8 11:44 | 显示全部楼层    本楼为最佳答案   
Sub demo()
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False
   Set fso = CreateObject("scripting.filesystemobject")
   Set conn = CreateObject("adodb.connection")
   Set rs = CreateObject("adodb.recordset")
   Path = ThisWorkbook.Path & "\"
   conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='text;HDR=No';Data Source =" & Path

   For Each file In fso.getfolder(ThisWorkbook.Path).Files
      If Not file.Name Like "*.txt" Then GoTo 1
      Sql = "select * from " & file.Name
      rs.Open Sql, conn, 3, 3
      If rs.RecordCount <> 0 Then
          [a1:g5000].ClearContents
         [a1].CopyFromRecordset rs
         [a:a].TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Space:=True
      End If
      rs.Close
      NewFile = Path & Split(file.Name, ".")(0) & ".xlsx"
      ActiveWorkbook.SaveAs Filename:=NewFile, FileFormat:=xlOpenXMLWorkbook
1:
   Next
   Application.ScreenUpdating = True
   Application.DisplayAlerts = True
End Sub



祝順心,南無阿彌陀佛!

demo.rar

248.16 KB, 下载次数: 22

评分

参与人数 2学分 +4 收起 理由
王宪 + 2 学习了
beachum + 2 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-6-8 15:49 | 显示全部楼层
cutecpu 发表于 2021-6-8 11:44
Sub demo()
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False

非常感谢您的帮助!!!
回复

使用道具 举报

 楼主| 发表于 2021-6-8 15:51 | 显示全部楼层
cutecpu 发表于 2021-6-8 11:44
Sub demo()
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False

我设置的是3个学分,怎么上面的记录是2个学分呢?

评分

参与人数 1学分 +2 收起 理由
cutecpu + 2 有喔,有 3 學分喔。祝順心,南無阿彌陀佛.

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-7-9 16:14 | 显示全部楼层
本帖最后由 beachum 于 2021-7-9 16:23 编辑
cutecpu 发表于 2021-6-8 11:44
Sub demo()
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False

@cutecpu大神,我遇到一个问题,每次txt文件转换xlsx文件时,总是在第二个文件(sh#600004)开始有些文件转换后,就出现
数据本该在4千多行的地方结束,但后面在5千行开始又有日期列
出现的现象。因为这样的现象后面计算的数据非常不准,需麻烦
您帮忙看看,原因在哪!谢谢!



批注 2021-07-09 154031.png
批注 2021-07-09 154220.png

demo.zip

36.33 KB, 下载次数: 1

txt样本1.zip

909.84 KB, 下载次数: 1

txt样本2.zip

493.54 KB, 下载次数: 4

xlsx样本1.zip

765.91 KB, 下载次数: 0

xlsx样本2.zip

832.69 KB, 下载次数: 0

xlsx样本3.zip

961.75 KB, 下载次数: 0

回复

使用道具 举报

发表于 2021-7-9 17:39 | 显示全部楼层
beachum 发表于 2021-7-9 16:14
@cutecpu大神,我遇到一个问题,每次txt文件转换xlsx文件时,总是在第二个文件(sh#600004)开始有些文件 ...

原來: [a1:g5000].ClearContents
修改: [a1:g50000].ClearContents


祝順心,南無阿彌陀佛!


评分

参与人数 1学分 +2 收起 理由
beachum + 2 学习了

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-6 07:30 , Processed in 0.257344 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表