|
||||
These pages are no longer updated and are only available for archive purposes.Click here to visit the pages with updated information. Export to a fixed-width textfileThis macro exports the values or formulas from a worksheet range to a fixed-width textfile: Sub ExportRangeAsFixedText(SourceWB As String, _
SourceWS As String, SourceAddress As String, _
TargetFile As String, LeftAlign As Boolean, _
SaveValues As Boolean, ExportLocalFormulas As Boolean, _
AppendToFile As Boolean)
' Exports the data in Workbooks(SourceWB).Worksheets(SourceWS).Range(SourceAddress) to
' the textfile TargetFile in fixed-width format,
' uses the column widths in SourceAddress as field lengths
' Example: ExportRangeAsFixedText ThisWorkbook.Name, _
"ExportSheet", "A3:E23", _
"C:\FolderName\FixedWidthText.txt", False, True, True, False
Dim SourceRange As Range, A As Integer, aCount As Integer
Dim ColWidth As Integer, eCount As Long
Dim r As Long, c As Integer, totr As Long, pror As Long
Dim fn As Integer, LineString As String, tLine As String
' validate the input data if necessary
Workbooks(SourceWB).Activate
Worksheets(SourceWS).Activate
If Application.WorksheetFunction.CountA(Range(SourceAddress)) = 0 Then Exit Sub
If Not AppendToFile Then
If Dir(TargetFile) <> "" Then
On Error Resume Next
Kill TargetFile
On Error GoTo 0
If Dir(TargetFile) <> "" Then
MsgBox TargetFile & _
" already exists, rename, move or delete the file before you try again.", _
vbInformation, "Export range to textfile"
Exit Sub
End If
End If
End If
' perform export
eCount = 0
Set SourceRange = Range(SourceAddress)
On Error GoTo NotAbleToExport
fn = FreeFile
Open TargetFile For Append As #fn ' open textfile for new input
On Error GoTo 0
' determine the total number of rows to process
totr = 0
For A = 1 To SourceRange.Areas.Count
totr = totr + SourceRange.Areas(A).Rows.Count
Next A
' start writing the fixed-width textfile
pror = 0
For A = 1 To SourceRange.Areas.Count
For r = 1 To SourceRange.Areas(A).Rows.Count
LineString = ""
For c = 1 To SourceRange.Areas(A).Columns.Count
ColWidth = CInt(SourceRange.Areas(A).Columns(c).ColumnWidth)
tLine = ""
On Error Resume Next
If SaveValues Then
tLine = SourceRange.Areas(A).Cells(r, c).Value
Else
If ExportLocalFormulas Then
tLine = SourceRange.Areas(A).Cells(r, c).FormulaLocal
Else
tLine = SourceRange.Areas(A).Cells(r, c).Formula
End If
End If
On Error GoTo 0
' create fixed-width string
If Len(tLine) > ColWidth Then
eCount = eCount + 1
Else
If LeftAlign Then
tLine = tLine & Space(ColWidth - Len(tLine))
Else
tLine = Space(ColWidth - Len(tLine)) & tLine
End If
End If
LineString = LineString & tLine
Next c
pror = pror + 1
If pror Mod 50 = 0 Then
Application.StatusBar = "Writing fixed-width textfile " & _
Format(pror / totr, "0 %") & "..."
End If
If LineString = "" Then
Print #fn,
Else
Print #fn, LineString
End If
Next r
Next A
Close #fn ' close the textfile
NotAbleToExport:
Set SourceRange = Nothing
Application.StatusBar = False
If eCount > 0 Then
MsgBox eCount & _
" errors encountered during export, check datalength/columnwidth", _
vbExclamation, "Export range to textfile"
End If
End Sub
Document last updated 1999-10-13 12:50:53 Printerfriendly version
|
||||
|
||||