Excel精英培训网

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

[已解决]【已解决】如何让代码在导入空文本时不报错

[复制链接]
发表于 2014-6-28 12:31 | 显示全部楼层 |阅读模式
本帖最后由 lijian8003 于 2014-6-28 15:50 编辑

附件中有一导入数据的宏代码,当导入文本为空时报错。
1、如何才能在导入文本为空时,仅导入空值,而不报错?
2、如何将附件中的3个宏代码合并为一个宏代码?
最佳答案
2014-6-28 14:37
这容易
Sub 导入()
    On Error Resume Next
    Sheets("001").Select
    Range("A:G").ClearContents
    Application.DisplayAlerts = False
    For I = 1 To 3
        Open ThisWorkbook.Path & "\00" & I & ".txt" For Input As #1
        s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
        Close #1
        Range("A" & I).Resize(UBound(s) + 1, 1) = WorksheetFunction.Transpose(s)
        s2 = Split(Range("A" & I), " ")
        Range("A" & I).Resize(1, UBound(s2) + 1) = s2
    Next
    Application.DisplayAlerts = True
End Sub

如何让代码导入文本为空时不报错.zip

19.51 KB, 下载次数: 6

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-6-28 13:19 | 显示全部楼层
加一句容错即可
Sub 导入002()
On Error Resume Next
Sheets("001").Select
...........
End Sub

评分

参与人数 1 +3 收起 理由
lijian8003 + 3 感谢

查看全部评分

回复

使用道具 举报

发表于 2014-6-28 13:37 | 显示全部楼层
本帖最后由 zjdh 于 2014-6-28 13:38 编辑

就用你的宏改一下
Sub 导入()
    On Error Resume Next
    Sheets("001").Select
    Range("A:G").ClearContents
    Application.DisplayAlerts = False
    For I = 1 To 3
        Open ThisWorkbook.Path & "\00" & I & ".txt" For Input As #1
        s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
        Close #1
        Range("A65536").End(3)(2).Resize(UBound(s) + 1, 1) = WorksheetFunction.Transpose(s)
        s2 = Split(Range("A65536").End(3), " ")
        Range("A65536").End(3).Resize(1, UBound(s2) + 1) = s2
    Next
    Range("A1:G1").Delete
    Application.DisplayAlerts = True
End Sub
回复

使用道具 举报

 楼主| 发表于 2014-6-28 14:19 | 显示全部楼层
zjdh 发表于 2014-6-28 13:37
就用你的宏改一下
Sub 导入()
    On Error Resume Next

感谢您的帮助!
合并的宏代码运行结果不对,002.txt为空,导入数据后单元格A2 B2 C2...应该为空,结果不是。
回复

使用道具 举报

发表于 2014-6-28 14:37 | 显示全部楼层    本楼为最佳答案   
这容易
Sub 导入()
    On Error Resume Next
    Sheets("001").Select
    Range("A:G").ClearContents
    Application.DisplayAlerts = False
    For I = 1 To 3
        Open ThisWorkbook.Path & "\00" & I & ".txt" For Input As #1
        s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
        Close #1
        Range("A" & I).Resize(UBound(s) + 1, 1) = WorksheetFunction.Transpose(s)
        s2 = Split(Range("A" & I), " ")
        Range("A" & I).Resize(1, UBound(s2) + 1) = s2
    Next
    Application.DisplayAlerts = True
End Sub

评分

参与人数 1 +3 收起 理由
lijian8003 + 3 感谢

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-6-28 14:46 | 显示全部楼层
本帖最后由 lijian8003 于 2014-6-28 14:52 编辑
zjdh 发表于 2014-6-28 14:37
这容易
Sub 导入()
    On Error Resume Next


感谢,问题解决了。
还有一处不解:
1、如果需要依次导入的文本为001 002...210,共210个,宏代码如何修改?
For I = 1 To 210
        Open ThisWorkbook.Path & "\00" & I & ".txt" For Input As #1


2、如果需要依次导入的文本为1 2 3 4...210,共210个,宏代码如何修改?
For I = 1 To 210
        Open ThisWorkbook.Path & "\" & I & ".txt" For Input As #1
回复

使用道具 举报

发表于 2014-6-28 15:06 | 显示全部楼层
Open ThisWorkbook.Path & "\" & Format(I, "000") & ".txt" For Input As #1

评分

参与人数 1 +3 收起 理由
lijian8003 + 3 感谢

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 13:13 , Processed in 2.120506 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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