Excel VBA常用技巧 第10章 文件操作 下载本文

VBA常用技巧代码解析

函数请参阅技巧错误!未找到引用源。。

第14行到第16行代码将数组mArr循环赋值给单元格,请参阅技巧错误!未找到引用源。。

第19行代码关闭文本文件。Close语句关闭Open语句所打开的输入/输出 (I/O) 文件,语法如下:

Close [filenumberlist]

参数filenumberlist是可选的,为一个或多个文件号,如省略则将关闭所有由Open语句打开的活动文件。

1-3 使用OpenText方法

使用OpenText方法载入一个文本文件并将其作为包含单个工作表的工作簿处理,如下面的代码所示。

#001 Sub OpenText()

#002 Dim myFileName As String #003 myFileName = \工资表.txt\#004 Sheet1.UsedRange.ClearContents #005 Workbooks.OpenText _

#006 Filename:=ThisWorkbook.Path & \#007 StartRow:=1, DataType:=xlDelimited, Comma:=True #008 With ActiveWorkbook

#009 With .Sheets(\工资表\#010

ThisWorkbook.Sheets(\.Columns.Count).Value = .Value

#011 End With #012 .Close False #013 End With #014 End Sub

代码解析:

OpenText过程使用OpenText方法载入“工资表.txt”文本文件并将其数据写入到工作表中。

第5行到第7行代码使用OpenText方法载入“工资表.txt”文本文件。OpenText方法载入一个文本文件,并将其作为包含单个工作表的工作簿进行分列处理,然后在此工作表中

5

VBA常用技巧代码解析

放入经过分列处理的文本文件数据,语法如下:

expression.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)

其中参数FileName是必需的,指定要载入并作分列处理的文件名称。 参数StartRow是可选的,作分列处理的起始行号,默认值为 1。 参数DataType是可选的,在文件中指定数据的列格式。

参数Comma是可选的,如果该值为True,则将分隔符设为逗号。 其他参数请参阅VBA中的帮助文档。

第9行到第11行代码将作为工作表打开的文本文件中的数据写入到工作表中。 第13行代码使用Close方法关闭打开的文本文件。

技巧2 将数据写入文本文件

在需要时可以将Excel中的数据写入到文本文件中,有以下方法可以实现。

2-1 使用Print # 语句

使用Print # 语句将数据写入文本文件中,如下面的代码所示。

#001 Sub PrintText()

#002 Dim myFileName As String #003 Dim myDataAr() As Variant #004 Dim myStr As String #005 Dim myRow As Integer #006 Dim myCol As Integer #007 Dim i As Integer #008 Dim j As Integer #009 On Error Resume Next

6

VBA常用技巧代码解析

#010 myFileName = \工资表.txt\

#011 Kill ThisWorkbook.Path & \#012 With Sheet1

#013 myRow = .Range(\#014 myCol = .Range(\#015 ReDim myDataAr(1 To myRow, 1 To myCol) #016 For i = 1 To myRow #017 For j = 1 To myCol

#018 myDataAr(i, j) = .Cells(i, j).Value #019 Next #020 Next

#021 Open ThisWorkbook.Path & \#022 For i = 1 To UBound(myDataAr, 1) #023 myStr = \

#024 For j = 1 To UBound(myDataAr, 2)

#025 myStr = myStr & CStr(myDataAr(i, j)) & \#026 Next

#027 myStr = Left(myStr, (Len(myStr) - 1)) #028 Print #1, myStr #029 Next #030 Close #1 #031 End With

#032 MsgBox \文件保存成功!\#033 End Sub

代码解析:

PrintText过程将工作表中数据写入到文本文件“工资表.txt”中。 第11行代码使用Kill方法删除同一目录中可能存在的同名文本文件。

第13、14行使用单元格的End属性取得工作表中已使用数据的行、列号,关于End属性请参阅错误!未找到引用源。。

第15行代码重新定义动态数组myDataAr的大小。关于动态数组请参阅技巧错误!未找到引用源。。

第16行到第20行代码将工作表数据赋给数组myDataAr。

7

VBA常用技巧代码解析

第21行代码使用Open语句打开文本文件以完成对文本文件的输入。关于Open语句请参阅技巧1-2。

第22行到第29行代码使用Print #语句将数组myDataAr中的所有元素写入到文本文件中。Print #语句将格式化显示的数据写入顺序文件中,语法如下:

Print #filenumber, [outputlist]

Filenumber是必需的,任何有效的文件号。 第30行代码Close语句关闭文本文件。

2-2 另存为文本文件

使用SaveAs方法将工作表另存为文本文件,如下面的代码所示。

#001 Sub SaveText()

#002 Dim myFileName As String #003 myFileName = \工资表.txt\#004 On Error Resume Next

#005 Kill ThisWorkbook.Path & \#006 Application.ScreenUpdating = False #007 Worksheets(\

#008 ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path _ #009 & \#010 FileFormat:=xlCSV #011 MsgBox \文件保存成功!\

#012 ActiveWorkbook.Close SaveChanges:=False #013 Application.ScreenUpdating = True #014 End Sub

代码解析:

SaveText过程将工作表“Sheet1”保存为文本文件。

第4、5行代码使用Kill方法删除同一目录中可能存在的同名文本文件。 第7行代码使用Copy方法复制工作表“Sheet1”。

第8行到第10行代码使用SaveAs方法将文件保存为文本文件。应用于Workbook对象的SaveAs方法保存对不同文件中的工作表的更改,语法如下:

expression.SaveAs(FileName,

FileFormat,

Password,

WriteResPassword,

ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru,

8