Excel精英培训网

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

[已解决]如何将多个宏代码合而为一

[复制链接]
发表于 2014-6-28 16:01 | 显示全部楼层 |阅读模式
有下述210个宏代码,从\文件1\里分别将001.txt  002.txt...210.txt导入001 002 ...210工作表的A列,如何将这210个宏代码合写在一起?
Sub 导入001()
Sheets("001").Select
Range("A1:A100").ClearContents
Application.DisplayAlerts = False '关闭报警
Dim s() As String '定义字串数组
Dim s2() As String '定义字串数组
On Error Resume Next
'Range("a1", Cells.Find("*", , , , , xlPrevious)) = ""
Open ThisWorkbook.Path & "\文件1\001.txt" For Input As #1 '打开文本文件
s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf) 'InputB(LOF(1), 1)读入内存,StrConv 编码转换;Split()分割成行
Close #1 '关闭文件
      For x = 0 To UBound(s)
         s2 = Split(s(x), " ")
         ss = UBound(s2)
       Range("a" & x + 1).Resize(, ss + 1).NumberFormat = "@"
       Range("a" & x + 1).Resize(, ss + 1) = s2
   Next
Application.DisplayAlerts = True '打开报警
End Sub

Sub 导入002()
Sheets("002").Select
Range("A1:A100").ClearContents
Application.DisplayAlerts = False '关闭报警
Dim s() As String '定义字串数组
Dim s2() As String '定义字串数组
On Error Resume Next
'Range("a1", Cells.Find("*", , , , , xlPrevious)) = ""
Open ThisWorkbook.Path & "\文件1\002.txt" For Input As #1 '打开文本文件
s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf) 'InputB(LOF(1), 1)读入内存,StrConv 编码转换;Split()分割成行
Close #1 '关闭文件
      For x = 0 To UBound(s)
         s2 = Split(s(x), " ")
         ss = UBound(s2)
       Range("a" & x + 1).Resize(, ss + 1).NumberFormat = "@"
       Range("a" & x + 1).Resize(, ss + 1) = s2
   Next
Application.DisplayAlerts = True '打开报警
End Sub

...

Sub 导入210()
Sheets("210").Select
Range("A1:A100").ClearContents
Application.DisplayAlerts = False '关闭报警
Dim s() As String '定义字串数组
Dim s2() As String '定义字串数组
On Error Resume Next
'Range("a1", Cells.Find("*", , , , , xlPrevious)) = ""
Open ThisWorkbook.Path & "\文件1\210.txt" For Input As #1 '打开文本文件
s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf) 'InputB(LOF(1), 1)读入内存,StrConv 编码转换;Split()分割成行
Close #1 '关闭文件
      For x = 0 To UBound(s)
         s2 = Split(s(x), " ")
         ss = UBound(s2)
       Range("a" & x + 1).Resize(, ss + 1).NumberFormat = "@"
       Range("a" & x + 1).Resize(, ss + 1) = s2
   Next
Application.DisplayAlerts = True '打开报警
End Sub
最佳答案
2014-6-28 16:31
又提新要求啦!
Sub 导入()
    For I = 1 To 210
        SHNam = Format(I, "000")
        With Sheets(SHNam)
            .Range("A1:G100").ClearContents
            Application.DisplayAlerts = False
            Dim s() As String
            Dim s2() As String
            On Error Resume Next
            Open ThisWorkbook.Path & "\文件1\" & SHNam & ".txt" For Input As #1
            s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
            Close #1
            For x = 0 To UBound(s)
                s2 = Split(s(x), " ")
                ss = UBound(s2)
                .Range("a" & x + 1).Resize(, ss + 1).NumberFormat = "@"
                .Range("a" & x + 1).Resize(, ss + 1) = s2
            Next
        End With
    Next
    Application.DisplayAlerts = True
End Sub
发表于 2014-6-28 16:27 | 显示全部楼层
本帖最后由 ghostjiao 于 2014-6-28 16:30 编辑
  1. Sub 导入()
  2.     Application.DisplayAlerts = False    '关闭报警
  3.     For i = 1 To 210
  4.         Sheets(Format(i, "000")).Select
  5.         Range("A1:A100").ClearContents
  6.         Dim s() As String    '定义字串数组
  7.         Dim s2() As String    '定义字串数组
  8.         On Error Resume Next
  9.         'Range("a1", Cells.Find("*", , , , , xlPrevious)) = ""
  10.         Open ThisWorkbook.Path & "\文件1" & Format(i, "000") & " .txt" For Input As #1    '打开文本文件
  11.         s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)    'InputB(LOF(1), 1)读入内存,StrConv 编码转换;Split()分割成行
  12.         Close #1    '关闭文件
  13.         For x = 0 To UBound(s)
  14.             s2 = Split(s(x), " ")
  15.             ss = UBound(s2)
  16.             Range("a" & x + 1).Resize(, ss + 1).NumberFormat = "@"
  17.             Range("a" & x + 1).Resize(, ss + 1) = s2
  18.         Next
  19.     Next
  20.     Application.DisplayAlerts = True    '打开报警
  21. End Sub
复制代码
是不是这样就行了,当然首先要保证有这么多工作表,且工作表的名字能对上

评分

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

查看全部评分

回复

使用道具 举报

发表于 2014-6-28 16:31 | 显示全部楼层    本楼为最佳答案   
又提新要求啦!
Sub 导入()
    For I = 1 To 210
        SHNam = Format(I, "000")
        With Sheets(SHNam)
            .Range("A1:G100").ClearContents
            Application.DisplayAlerts = False
            Dim s() As String
            Dim s2() As String
            On Error Resume Next
            Open ThisWorkbook.Path & "\文件1\" & SHNam & ".txt" For Input As #1
            s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
            Close #1
            For x = 0 To UBound(s)
                s2 = Split(s(x), " ")
                ss = UBound(s2)
                .Range("a" & x + 1).Resize(, ss + 1).NumberFormat = "@"
                .Range("a" & x + 1).Resize(, ss + 1) = s2
            Next
        End With
    Next
    Application.DisplayAlerts = True
End Sub

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-6-28 17:11 | 显示全部楼层
本帖最后由 lijian8003 于 2014-6-28 17:29 编辑
zjdh 发表于 2014-6-28 16:31
又提新要求啦!
Sub 导入()
    For I = 1 To 210


感谢帮助。您的代码经过测试,有误。烦请查看。----发现问题所在了,是 Range("A1:G100").ClearContents

附件.zip

272.45 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2014-6-28 17:15 | 显示全部楼层
本帖最后由 lijian8003 于 2014-6-28 17:32 编辑
ghostjiao 发表于 2014-6-28 16:27
是不是这样就行了,当然首先要保证有这么多工作表,且工作表的名字能对上


感谢帮助。您的代码经过测试,有误。烦请查看。------3#代码测试通过
回复

使用道具 举报

 楼主| 发表于 2014-6-28 17:50 | 显示全部楼层
本帖最后由 lijian8003 于 2014-6-28 17:54 编辑
zjdh 发表于 2014-6-28 16:31
又提新要求啦!
Sub 导入()
    For I = 1 To 210


原想依样画葫芦,不料却画不成,以下的代码也是001-210有210个,也想合并为一个宏代码,就是搞不妥。烦请帮助!
Sub 导出001()
Dim i&, j%, k, s, arr
     arr = Sheets("001").UsedRange
     Open ThisWorkbook.Path & "\文件2\" & "001.txt" For Output As #1
         For i = 1 To 3
             s = ""
             For j = 7 To 7 '假设数据区域有多列
                s = s & vbTab & arr(i, j)
             Next
             Print #1, Mid(s, 2)
         Next
     Close #1
End Sub
回复

使用道具 举报

发表于 2014-6-28 18:10 | 显示全部楼层
lijian8003 发表于 2014-6-28 17:11
感谢帮助。您的代码经过测试,有误。烦请查看。----发现问题所在了,是 Range("A1:G100").ClearContent ...

那是特意修改的,因为你的原始数据要占好多列,而你原来语句只清除A列,感觉不合理。
回复

使用道具 举报

 楼主| 发表于 2014-6-28 18:13 | 显示全部楼层
zjdh 发表于 2014-6-28 18:10
那是特意修改的,因为你的原始数据要占好多列,而你原来语句只清除A列,感觉不合理。

原想依样画葫芦,不料却画不成,6#的宏代码也是001-210有210个,也想合并为一个宏代码,就是搞不妥。烦请帮助!
回复

使用道具 举报

发表于 2014-6-28 18:17 | 显示全部楼层
lijian8003 发表于 2014-6-28 17:50
原想依样画葫芦,不料却画不成,以下的代码也是001-210有210个,也想合并为一个宏代码,就是搞不妥。烦 ...

你这是要导出数据到TXT,最好上传一个附件。
看代码似乎只要导出第7列数据,不知是否这样?
回复

使用道具 举报

 楼主| 发表于 2014-6-28 18:24 | 显示全部楼层
zjdh 发表于 2014-6-28 18:17
你这是要导出数据到TXT,最好上传一个附件。
看代码似乎只要导出第7列数据,不知是否这样?

是的。放上附件

附件.zip

444.66 KB, 下载次数: 7

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 08:07 , Processed in 0.348417 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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