Excel精英培训网

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

[已解决]导出TXT求助,谢谢爱疯老师!

[复制链接]
发表于 2016-1-7 09:49 | 显示全部楼层 |阅读模式
本帖最后由 lhj323323 于 2016-1-8 12:24 编辑

老师:

我写的语句,虽能将EXCEL中的数据导出TXT,但导出的效果与我想要的效果差得太远,

现将我的需求和我想达到的效果附上,请老师帮忙,谢谢了。

求助.rar (16.9 KB, 下载次数: 15)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-1-7 10:24 | 显示全部楼层
Sub 导出txt()
    Dim arr, titleArray, fullpath, n, i, str
   
    arr = Sheets("结果").Range("a1").CurrentRegion
    Title = Array("[MARK]", "[TIP]")
    fullpath = ThisWorkbook.Path & "\Sav.txt"

    Open fullpath For Output As #1
    For n = 0 To UBound(Title)
        Print #1, Title(n)
        For i = 2 To UBound(arr)
            str = Format(arr(i, 1), "000000")
            str = IIf(Left(str, 1) = "6", "01", "00") & str & "=15"
            Print #1, str
        Next i
        Print #1,
    Next n
    Close #1
End Sub

评分

参与人数 2 +6 收起 理由
lhj323323 + 3 太惊艳!谢谢爱疯老师!
lichuanboy44 + 3 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-1-8 08:59 | 显示全部楼层
本帖最后由 lhj323323 于 2016-1-8 09:03 编辑
爱疯 发表于 2016-1-7 10:24
Sub 导出txt()
    Dim arr, titleArray, fullpath, n, i, str
   

谢谢爱疯老师!

如果导出的两部分内容有区别,即
[MARK]
01600566=15
                                                             两部分之间的空行不要
[TIP]
01600566=洪城股份#$历史赢亏69259
                                                            TXT未尾存在 多个空行,请删除
说明:
今天的后续提问是被迫的,由于我在昨天想当然地认为我有能力对老师的语句自行修改,结果看到就傻眼了
1、[MARK]这一部分的内容是正确的。
2、[TIP]与[MARK]之间存在空行,请爱疯老师将其删除
3、[TIP]这部分内容的最后,存在多个空行,也请将其删除
4、[TIP]里的内容有变化,请看本楼的标红部分,其中#$这个符号,在编辑完毕保存时,老是报错。

再次感谢爱疯老师!

还有一问
我最终需要的外部文档的后缀是DAT,只是DAT可以用TXT格式打开来浏览,如果上述需求能实现的话,有没有办法,仍在上述的VBA语句中,把这个已生成的TXT格式自动改为DAT格式?


回复

使用道具 举报

发表于 2016-1-8 09:30 | 显示全部楼层
Sub 导出txt()
    Dim arr, title, fullpath, str1, str2, str3, i, j

    arr = Sheets("结果").Range("a1").CurrentRegion
    title = Array("[MARK]", "[TIP]")
    fullpath = ThisWorkbook.Path & "\sav.dat"

    Open fullpath For Output As #1
    For j = 0 To UBound(title)
        Print #1, title(j)
        For i = 2 To UBound(arr)
            str2 = Format(arr(i, 1), "000000") & "="
            str1 = IIf(Left(str2, 1) = "6", "01", "00")
            str3 = IIf(j, "洪城股份#$历史赢亏69259", "15")
            Print #1, str1 & str2 & str3
        Next i
    Next j
    Close #1
End Sub


这样行吗
回复

使用道具 举报

 楼主| 发表于 2016-1-8 12:15 | 显示全部楼层
爱疯 发表于 2016-1-8 09:30
Sub 导出txt()
    Dim arr, title, fullpath, str1, str2, str3, i, j

01600566=洪城股份#$历史赢亏69259

洪城股份是数据源表[结果]的B列的内容
历史赢亏是数据源表[结果]的C列的标题行的内容
69259是数据源表[结果]的C列的内容

这三组数据不是常数,而是变量
回复

使用道具 举报

 楼主| 发表于 2016-1-8 12:23 | 显示全部楼层
爱疯 发表于 2016-1-8 09:30
Sub 导出txt()
    Dim arr, title, fullpath, str1, str2, str3, i, j



爱疯老师:
不用改了,我修改如下,测试成功了,再次感谢!!

            'str3 = IIf(j, "洪城股份#$历史赢亏69259", "15")
            str3 = IIf(j, arr(i, 2) & "#$" & arr(1, 3) & Format(arr(i, 3), "0.00"), "15")

回复

使用道具 举报

发表于 2016-1-8 12:27 | 显示全部楼层    本楼为最佳答案   
lhj323323 发表于 2016-1-8 12:15
01600566=洪城股份#$历史赢亏69259

洪城股份是数据源表[结果]的B列的内容

Sub 导出txt()
    Dim arr, title, fullpath, str1, str2, str3, i, j

    arr = Sheets("结果").Range("a1").CurrentRegion
    title = Array("[MARK]", "[TIP]")
    fullpath = ThisWorkbook.Path & "\标记.dat"

    Open fullpath For Output As #1
    For j = 0 To UBound(title)
        Print #1, title(j)
        For i = 2 To UBound(arr)
            str2 = Format(arr(i, 1), "000000=")
            str1 = IIf(Left(str2, 1) = "6", "01", "00")
            str3 = IIf(j, arr(i, 2) & "#$" & arr(1, 3) & arr(i, 3), "15")
            Print #1, str1 & str2 & str3
        Next i
    Next j
    Close #1
End Sub

导出TXT3.rar (19.33 KB, 下载次数: 17)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 04:22 , Processed in 0.431985 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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