[color=green]'[/color]
[color=darkblue]Sub[/color] ImportapoAlan()
[color=green]' using the Object FileSystemObject from Microsoft's Scripting library.[/color]
[color=green]' recommended (early binding) initially in Tools>>References>>then check Microsoft Scripting Runtime Library[/color]
[color=green]' So we have Scripting (Runtime) library available[/color]
[color=green]' u.a. in there is the class FileSystemObject (FSO) . That allow access to the host computer's file system, or rather "sort of being able to use the old DOS like comannds"[/color]
[color=green]' Typically we start start by creating an instance of the FileSystem[color=darkblue]Object[/color], ours we want for text reading (but we get all the properties and methods by creating an instance of that claArraySplitStreamString. Syntax fo that is:[/color]
[color=darkblue]Dim[/color] objFilepathSOtxtRead [color=darkblue]As[/color] Object
[color=darkblue]Set[/color] objFilepathSOtxtRead = Create[color=darkblue]Object[/color]("Scripting.FileSystemObject")
[color=darkblue]Dim[/color] objFilepath [color=darkblue]As[/color] Object [color=green]' the given file path is in fact an object![/color]
[color=darkblue]Dim[/color] StreamString [color=darkblue]As[/color] String, ArraySplitStream[color=darkblue]String[/color] [color=green]'The got stream comes out as a (very) long string, that split (ArraySplitStream[color=darkblue]String[/color]) then become an Array[/color]
[color=darkblue]Dim[/color] RowNumberinFinalArray [color=darkblue]As[/color] [color=darkblue]Byte[/color], ColumnNumberinFinalArray [color=darkblue]As[/color] [color=darkblue]Byte[/color] [color=green]'Limit initially sizes to 255[/color]
[color=darkblue]Dim[/color] x [color=green]' No idea????[/color]
[color=darkblue]Dim[/color] TempArrayForRowSplitinColumn 'Becomes Array by Split Method
[color=darkblue]Dim[/color] y() [color=darkblue]As[/color] String [color=green]' The final Array looking as we want in Excel.[/color]
[color=darkblue]Dim[/color] strFile [color=darkblue]As[/color] String
[color=darkblue]Let[/color] strFile = Application.GetOpenFilename("CSV Files,*.txt") [color=green]'Get Dialogue box for opening Files[/color]
[color=darkblue]If[/color] strFile = "False" [color=darkblue]Then[/color] [color=darkblue]Exit[/color] [color=darkblue]Sub[/color]
[color=darkblue]Dim[/color] FinalShtRange [color=darkblue]As[/color] Range [color=green]'Final range in Spreadsheet.[/color]
[color=green]'..from apo.. ArraySplitStreamString = Split(CreateObject("scripting.filesystemobject").getfile(strFile).openastextstream.readall, vbCrLf)[/color]
[color=green]'....expanded by me..!!!!:-[/color]
[color=darkblue]Set[/color] objFilepath = objFilepathSOtxtRead.getfile(strFile) [color=green]'Looks like a sgring but is actually an object[/color]
StreamString = objFilepath.openastextstream.readall [color=green]' returns long string for entire File[/color]
ArraySplitStreamString = Split(StreamString, vbCrLf) [color=green]'Split long string into rows looking similar to oroginal text Files[/color]
[color=darkblue]ReDim[/color] y(1 [color=darkblue]To[/color] [color=darkblue]UBound[/color](ArraySplitStreamString) + 1, 1 [color=darkblue]To[/color] 1) [color=green]' (re)Set size to 1 column of row number equal to the line number. Must do this as further ReDim only allows 1 index to change[/color]
[color=darkblue]For[/color] RowNumberinFinalArray = 1 [color=darkblue]To[/color] [color=darkblue]UBound[/color](ArraySplitStreamString) + 1 [color=green]'For each row.... ( .From 1 to Array index+1(+1 because Array starts at 0)[/color]
TempArrayForRowSplitinColumn = Split(ArraySplitStreamString(RowNumberinFinalArray - 1), ",") [color=green]' -1 to get back to Array index convention[/color]
[color=darkblue]ReDim[/color] [color=darkblue]Preserve[/color] y(1 [color=darkblue]To[/color] [color=darkblue]UBound[/color](ArraySplitStreamString) + 1, 1 [color=darkblue]To[/color] [color=darkblue]UBound[/color](TempArrayForRowSplitinColumn)) [color=green]' change column size to number of split columns[/color]
[color=darkblue]For[/color] ColumnNumberinFinalArray = 1 [color=darkblue]To[/color] [color=darkblue]UBound[/color](TempArrayForRowSplitinColumn) [color=green]'....go througth each column[/color]
y(RowNumberinFinalArray, ColumnNumberinFinalArray) = TempArrayForRowSplitinColumn(ColumnNumberinFinalArray - 1) [color=green]'Most importan doing line: Give final array the value in appropriate place.[/color]
[color=darkblue]Next[/color] ColumnNumberinFinalArray [color=green]' going along each column until all done then....[/color]
[color=darkblue]Next[/color] RowNumberinFinalArray [color=green]' start again for the next Row[/color]
[color=darkblue]Set[/color] FinalShtRange = Sheets("apoLCS").Cells(1, 1).Resize(UBound(y, 1), UBound(y, 2)) [color=green]'Set Final Range to size of final Array[/color]
[color=darkblue]Let[/color] FinalShtRange.Value = y [color=green]'copy Array to final range (will only work if sizes are identical)[/color]
[color=darkblue]With[/color] Sheets("apoLCS").UsedRange
x = .Replace("""", "", xlPart) [color=green]'Not sure if , What , Why or how that is doung anything. Appears not to be necerssary[/color]
[color=darkblue]End[/color] [color=darkblue]With[/color]
[color=darkblue]End[/color] [color=darkblue]Sub[/color] [color=green]'ImportapoAlan()[/color]
[color=darkblue]Sub[/color] Importapo()