ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: wanapen

[求助] 如何能不打开EXCEL文件且将EXCEL数据写入TXT??

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-5-9 23:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
bluexuemei 发表于 2013-5-9 23:07
schema.ini中设置
[目标文件.txt]
ColNameHeader=false

短信收到,你已经写出来了,schema.ini可以通过代码生成,用完后再删除它,如果要生成csv或用逗号分割的文本文件,则不需要schema.ini:


  1. Sub ADO生成csv文件() '或用逗号分割的文本文件(.txt)
  2.     Dim cnn, SQL$, s$, f$
  3.     Set cnn = CreateObject("adodb.connection")
  4.     f = ThisWorkbook.Path & "\目标文件.csv"
  5.     If Dir(f) <> "" Then Kill f
  6.     cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no';data source=" & ThisWorkbook.Path & "\数据源.xls" '如果有标题,则去掉HDR=No,下同
  7.     SQL = "select * into [Text;FMT=Delimited;HDR=No;DATABASE=" & ThisWorkbook.Path & "\;].目标文件.csv from [Sheet1$A6:X]"
  8.     cnn.Execute SQL
  9.     cnn.Close
  10.     Set cnn = Nothing
  11.     MsgBox "ok"
  12. End Sub

  13. Sub ADO生成用制表符分割的文本文件()
  14.     Dim cnn, SQL$, s$, f$
  15.     Set cnn = CreateObject("adodb.connection")
  16.     s = "[目标文件.txt]" & vbCrLf & "COLNAMEHEADER = False" & vbCrLf & "Format = TabDelimited"
  17.     Open ThisWorkbook.Path & "\schema.ini" For Output As #1
  18.     Print #1, s
  19.     Close #1
  20.     f = ThisWorkbook.Path & "\目标文件.txt"
  21.     If Dir(f) <> "" Then Kill f
  22.     cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no';data source=" & ThisWorkbook.Path & "\数据源.xls" '如果有标题,则去掉HDR=No,下同
  23.     SQL = "select * into [Text;FMT=Delimited;HDR=No;DATABASE=" & ThisWorkbook.Path & "\;].目标文件.txt from [Sheet1$A6:X]"
  24.     cnn.Execute SQL
  25.     cnn.Close
  26.     Set cnn = Nothing
  27.     Kill ThisWorkbook.Path & "\schema.ini"
  28.     MsgBox "ok"
  29. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-5-9 23:24 | 显示全部楼层
请看附件
SQL语句生成文本文件.rar (119.12 KB, 下载次数: 32)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-5-9 23:36 | 显示全部楼层
zhaogang1960 发表于 2013-5-9 23:21
短信收到,你已经写出来了,schema.ini可以通过代码生成,用完后再删除它,如果要生成csv或用逗号分割的文 ...

还是老师写得好,再次感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-10 11:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
alzeng 发表于 2013-5-9 17:51
等Zamyi更好的方法……

先谢谢alzeng 老师~~~

但是在FOR语句那里我还是没有太懂~~嘿嘿~希望老师别嫌我烦~~~

我试着运用循环跑了一遍,在print #1,str 处会提示错误~~~~还烦请老师再帮帮我~万分感谢~!!!

我的目的 是这样的

比如我有1101.xls-1102.xls-1111.xls-1112.xls

如何能让1101.xls与1102.xls的数据共同写入110.txt
如何能让1111.xls与1112.xls的数据共同写入111.txt

老师辛苦了~~~
987.zip (506.84 KB, 下载次数: 11)

TA的精华主题

TA的得分主题

发表于 2013-5-10 11:28 | 显示全部楼层
  1. Sub wrtInTxt()
  2.     Dim oClp As Object
  3.     Dim Flnm, Str$, k%, Txtnm$
  4.     Dim Wb As Workbook, Pth$

  5.     Set oClp = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
  6.     Flnm = Application.GetOpenFilename("Excel文件,*.xls", , "请选择", , True)
  7.     Txtnm = InputBox("请输入你想保存的文本名称:")
  8.     For k = 1 To UBound(Flnm)
  9.         Set Wb = GetObject(Flnm(k))
  10.         Wb.Sheets(1).[A6].CurrentRegion.Copy    '此处假设所有文件格式相同
  11.         oClp.getfromclipboard: Str = oClp.gettext
  12.         Pth = Wb.Path
  13.         [A1].Copy: Wb.Close 0

  14.         Open Pth & "" & Txtnm & ".txt" For Append As #1
  15.         Print #1, Str: Reset
  16.     Next
  17.     Set oClp = Nothing
  18.     MsgBox "数据已写入文本中。"
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-5-10 11:30 | 显示全部楼层
每次选择的多个文件写入一个文本文件中(名称需输入),如多个文本请多次执行——因为我无法获你哪些文件需要合并,文本文件名称又应该是什么。
以下是两次运行后的结果:
2013-0051001.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-10 11:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wanapen 于 2013-5-10 11:50 编辑
alzeng 发表于 2013-5-9 17:51
等Zamyi更好的方法……


alzeng 老师

原来这个
Flnm = Application.GetOpenFilename("Excel文件,*.xls", , "请选择", , True)语句是可以多选的啊 ??

那老师 如果我想带条件选择呢?比如满足前3位为110的所有XLS,这个该怎么弄呢 ?

就是不用手动选择,让VBA在指定文件夹中选择满足条件的所有EXCEL!

TA的精华主题

TA的得分主题

发表于 2013-5-10 11:47 | 显示全部楼层
wanapen 发表于 2013-5-10 11:43
alzeng 老师

原来这个

手工选择或是选择后设置条件遍历时过滤掉。

——不要指望这个可以人工智能。

TA的精华主题

TA的得分主题

发表于 2013-5-10 11:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub test()
  2. Application.DisplayAlerts = False
  3. Application.ScreenUpdating = False
  4. fs = Application.GetOpenFilename("Excel文件,*.xls", , "请选择", , True)
  5. For Each f In fs
  6.   With GetObject(f)
  7.     .SaveAs Replace(f, ".xls", ".txt"), xlUnicodeText, False
  8.     .Close
  9.   End With
  10. Next
  11. Application.DisplayAlerts = True
  12. Application.ScreenUpdating = True
  13. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 03:00 , Processed in 0.041439 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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