求一段Excel导出TXT的VBA代码

本人没有接触过VBA,但是因为目前有个需求,需要用VBA实现比较省时间,功能比较简单,举个简单的例子:
一:第一行不输出
二:从第二行开始:
1.第一列:空值,输出第二列
2.第一列:“追加”,输出第二列
3.第一列:“删除”,不输出第二列

就是这么一个功能,麻烦大神给我代码的时候简单的注释一下,我之前学过别的编程语言,所以可以根据注释自己改一改,万分感谢了!

下面的这个是按照你所说的,仅仅根据第二行的第一列的值,如果是空或者“追加”,则输出第二行的值到TXT里面。如果第二行的列数比较多(大于256列)且你用的是2007及以上的版本,请将下文中的256改为16384.

Public Sub TextOutPut()
Dim strText As String
Dim i As Integer

If ActiveSheet.Cells(2, 1) = "追加" Or ActiveSheet.Cells(2, 1) = "" Then
    '如果第二行第一列为"追加"或为空,则输出第二行,否则不输出
    i = 1
    Do
        strText = strText & ActiveSheet.Cells(2, i) & Chr(9)        '相邻两单元格之间的数据用制表符隔开
    i = i + 1
    Loop Until i = Cells(2, 256).End(xlToLeft).Column + 1
    
    Open ThisWorkbook.FullName & ".txt" For Output As #1        '将txt文件放在该工作簿的文件夹下
        Print #1, strText       '输出txt
    Close #1
End If

End Sub

追问

其实我是想从第二行开始,每行进行判断输出,每行只需要输出第二列,应该是按照你的代码在最外层加一个循环就可以,是只要Print一次,在TXT里面就算输出一行吗?

还有个问题,我没有找到具体怎么添加VBA宏然后执行,麻烦给指点一下吧...

追答按ALT + F11,然后插入>>>模块,把下面的东西粘贴进模块,然后按F5运行。


Public Sub TextOutPut()
Dim strText As String
Dim i As Integer
 
 i = 2
If ActiveSheet.Cells(i, 1) = "追加" Or ActiveSheet.Cells(i, 1) = "" Then
    '如果第i行第一列为"追加"或为空,则输出第i行第二列,否则不输出
    Do
        strText = strText & ActiveSheet.Cells(i, 2) & Chr(13) & Chr(10)     '按行读入各行内容
    i = i + 1
    Loop Until i = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row
     
    Open ThisWorkbook.FullName & ".txt" For Output As #1        '将txt文件放在该工作簿的文件夹下
        Print #1, strText       '输出txt
    Close #1
End If
 
End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-29
用VBA代码将Excel表导出为txt格式
Dim Arr, Ary, k%, Str$

Arr = Range("A1", [A65536].End(3)(1, 5))
ReDim Ary(1 To UBound(Arr))
For k = 1 To UBound(Arr)
Str = Join(Application.Index(Arr, k), Chr(9))
Ary(k) = Str
Next
Str = Join(Ary, vbCrLf)

Open ThisWorkbook.Path & "A.txt" For Output As #1
Print #1, Str
Reset
End Sub本回答被网友采纳
第2个回答  2014-03-29
需要提供真实的TXT文档