You are on page 1of 6


Excel VBA Programming ­ Write To A Text File


Excel VBA Programming
Getting Started
8 part section >>
VBA Programming Variables
6 Part Section >>
Conditional Logic
9 part section >>
Strings and String Functions
8 Part Section
Programming Loops
4 Part Section
Programming Arrays
4 Part Section
Subs and Functions
6 Part Section
Excel VBA and Text Files
Open a Text File
Writing to a text file
Excel VBA and User Forms
5 part section >>
An Excel Picture Viewer Project
12 part section >>
Excel VBA and Charts
4 part section >>
A TreeView Project
A 4 part section >>


 In this lesson. Like this: http://www. We can then loop round all these cells getting the values. an inner loop and outer one. Our spreadsheet is 3 columns wide by 8 rows high: We could have two loops to cycle through the data above. The first job is to find a way to reference the cells on the spreadsheet that we want. you'll learn how to write data from a spreadsheet to a text Excel VBA Programming ­ Write To A Text File Writing to text files in Excel VBA   In the previous lesson. What we'll do is take our reordered columns from last time and write them back to a CSV file.html 2/6 . you saw how to open up a text file with Excel VBA code.homeandlearn.

We're almost ready to start writing the code. It then goes back up to find the last cell in column A that has something in it. With that in mind. The technique we prefer. File_Contents After the word Write you type your file number.Column http://www. or more columns to the spreadsheet. which is the number columns.End(xlDown). A similar technique is used to find the last column with data. VBA will then try to open up your file. how do we get these values? There are lots of way to get the last row and last column with data. It would mean our loop would not pick up the new data. If a file of the one named in FilePath doesn't exist it will be created for you. (If you want the new contents to be added to the end of your file then you would use Append instead of Output. let's write some code. you can type either Row or Column. After a comma. "A"). In between the round brackets of special SpecialCells is the constant xlCellTypeLastCell. suppose we decided to add more rows. If the file does exist then it will be overwritten.Row This code first goes to the very last row in Excel. though. A better way is to get the last row with data in it and the last column with data. To actually open a text file for writing. though. After a dot. add the following two lines: LastCol = ActiveSheet.12/23/2015 Excel VBA Programming ­ Write To A Text File For i = 1 To 8 For j = 1 To 3 Next j Next i The outer loop goes from 1 to 8. is this: LastRow = Cells(1. for example.UsedRange. The inner loop goes from 1 to 3. We could then have this for the loops: For i = 1 To LastRow For j = 1 To LastColumn Next j Next i The question is.SpecialCells(xlCellTypeLastCell). The inbuilt SpecialCells is then used.Row This refers to any range in your active worksheet with data in it. However.UsedRange. no matter which version you have (older versions of Excel have fewer rows than later versions).) To do the actual writing to the file you need this: Write #1. you need this: Open FilePath For Output As #1 This is the same as you need the contents you wish to write to the file.SpecialCells(xlCellTypeLastCell).html 3/6 . Create a new Sub and call it WriteTextFile.homeandlearn. depending on which last cell you want. is this: LastRow = ActiveSheet. This gets you the last cell with data. This is the number of rows we have. A popular way to get the last row with data in. except for the use of the keyword Output. Add the following four variables to your new Sub: Dim FilePath As String  Dim CellData As String  Dim LastCol As Long  Dim LastRow As Long To get the last row and column with data.

csv" This points to a file called " http://www. j). Keep studying it and it will make sense. The outer loop takes care of the rows and the inner loop takes care of the column. However.12/23/2015 Excel VBA Programming ­ Write To A Text File LastRow = ActiveSheet. we're looping round cells on the spreadsheet.DefaultFilePath & "\auth. Inside the inner loop." End If Next j Write #2. #2. However.html 4/6 .Row You then need a file path. j).Value) + ". you may get an error telling you the file is already open when you run the code. If so.Value) Else CellData = CellData + Trim(ActiveCell(i. If there is no such file then VBA will create one for us. j). Christopher We're getting one cell at a time from the spreadsheet. if j does not equal LastRow then this gets executed instead: CellData = CellData + Trim(ActiveCell(i.Value) + ".Value) + ". We've already used #1 previously. Here it is: For i = 1 To LastRow For j = 1 To LastCol If j = LastCol Then CellData = CellData + Trim(ActiveCell(i.Value) Whatever is in the ActiveCell i. j will have its Value placed into the variable called CellData. j). we have this If Statement: If j = LastCol Then CellData = CellData + Trim(ActiveCell(i.homeandlearn. This is quite complex so don't worry if you don't understand it at first. j). We want each line in our text file to look like this. as before: FilePath = Application." End If The reason why we want to know if j = LastCol is because of the commas.UsedRange. Brookmyre. remember: 9780349114903. close down Excel and reopen it. If j does equal LastCol then this gets executed: CellData = CellData + Trim(ActiveCell(i. which is the third item. CellData  CellData = "" Next i As we said. (NOTE: On some systems.) The next code to add is the double For Loop.Value) Else CellData = CellData + Trim(ActiveCell(i. so we'll try #2 to avoid any conflicts. The next line to add is the one that opens the file for Output: Open FilePath For Output As #2 Notice that the file number at the end.SpecialCells(xlCellTypeLastCell). j).csv in the Documents folder. there's no comma at the end. Each of the items needs to be separated by a comma.

 but just before the Next i of the outer loop. CellData will hold this value: 9780349114903. Brookmyre. You should find that it looks like this: (Don't worry about the double quotes that VBA has added to the beginning and end of each line. CellData  CellData = "" The first line is the one that actually writes the new line to the text file.html 5/6 .12/23/2015 Excel VBA Programming ­ Write To A Text File The only difference is the comma on the end. Brookmyre. Now locate your new text file.homeandlearn.) http://www. The whole of the code looks like this: Run your code and try it out. The next time round it will hold this: 9780349114903. Christopher Outside of the inner loop. we have these two lines: Write The second line resets the CellData variable to a blank string. both outside of the two loops. at the end: Close #2  MsgBox ("Done") These lines close the file and then display a message box. The first time round the inner loop. The final two lines of code are these. And the final time round it will hold this value: 9780349114903.

 you'll make a start learning about User Forms.html 6/6 .12/23/2015 Excel VBA Programming ­ Write To A Text File   In the next Excel VBA User Forms > Lots more free online course here on our main Home and Learn site © All course material copyright Ken Carney http://www.homeandlearn.