Looping through file names of a csv and then through other csv

M

Matt P

Alright my code works for the main part of the script, but I am having
problems looping through the files in a folder. It gives me an error
saying "File already Open" Not sure exactly why this is happening.
Anyone spot where I went wrong, or maybe what is causing the
complications? I tested all of the code up until Line 29 to see if
everything was being grabbed correctly. Thanks for any help!

Heres my code:

Sub ReadCSV()

Dim intFile As Integer
Dim intIndex As Integer
Dim strData As String
Dim strTemp As String
Dim strIndexNum As String
Dim arrData As Variant
Dim arrIndexNum As Variant
Dim lngRow As Long
Dim TargetRow As Long
Dim Targetsht As Worksheet
Dim CurrentCellValue As String

MsgBox intFile
intFile = FreeFile
MsgBox intFile
intIndex = FreeFile
TargetRow = Range("A1").SpecialCells(xlLastCell).Row + 1
lngRow = TargetRow
'MsgBox lngRow
Open "C:\Documents and Settings\User\My Documents\Scanned Pages
\Index.csv" For Input As #intIndex
Do While Not EOF(intIndex)
Line Input #intIndex, strIndexNum
arrIndexNum = Split(strIndexNum, ",")
MsgBox "C:\Documents and Settings\User\My Documents\Scanned Pages\" &
arrIndexNum(0) & ""

MsgBox intFile
Open "C:\Documents and Settings\User\My Documents\Scanned Pages\" &
arrIndexNum(0) & "" For Input As #intFile

Do While Not EOF(intFile)

Line Input #intFile, strData
arrData = Split(strData, ",")
'Set Targetsht = ActiveWorkbook.Worksheets(CurrentCellValue)
If IsNumeric(Left(arrData(0), 1)) = False And _
IsNumeric(Right(arrData(0), 1)) = False And _
UCase(arrData(0)) = arrData(0) Then
'TargetRow = ActiveWorkbook.Worksheets.Cells(.Rows.Count, "A").Row + 1

If strTemp <> "" Then Range("A" & lngRow) = strTemp
lngRow = lngRow + 1
strTemp = Trim(strData)
Else
strTemp = strTemp & "," & Trim(strData)
End If
Loop
Close #intFile
Loop
Close #intIndex
Range("A" & lngRow) = strTemp

End Sub
 
M

Matt P

Alright my code works for the main part of the script, but I am having
problems looping through the files in a folder.   It gives me an error
saying "File already Open"  Not sure exactly why this is happening.
Anyone spot where I went wrong, or maybe what is causing the
complications?  I tested all of the code up until Line 29 to see if
everything was being grabbed correctly. Thanks for any help!

Heres my code:

Sub ReadCSV()

Dim intFile As Integer
Dim intIndex As Integer
Dim strData As String
Dim strTemp As String
Dim strIndexNum As String
Dim arrData As Variant
Dim arrIndexNum As Variant
Dim lngRow As Long
Dim TargetRow As Long
Dim Targetsht As Worksheet
Dim CurrentCellValue As String

MsgBox intFile
intFile = FreeFile
MsgBox intFile
intIndex = FreeFile
TargetRow = Range("A1").SpecialCells(xlLastCell).Row + 1
lngRow = TargetRow
'MsgBox lngRow
Open "C:\Documents and Settings\User\My Documents\Scanned Pages
\Index.csv" For Input As #intIndex
Do While Not EOF(intIndex)
Line Input #intIndex, strIndexNum
arrIndexNum = Split(strIndexNum, ",")
MsgBox "C:\Documents and Settings\User\My Documents\Scanned Pages\" &
arrIndexNum(0) & ""

MsgBox intFile
Open "C:\Documents and Settings\User\My Documents\Scanned Pages\" &
arrIndexNum(0) & "" For Input As #intFile

Do While Not EOF(intFile)

Line Input #intFile, strData
arrData = Split(strData, ",")
'Set Targetsht = ActiveWorkbook.Worksheets(CurrentCellValue)
If IsNumeric(Left(arrData(0), 1)) = False And _
IsNumeric(Right(arrData(0), 1)) = False And _
UCase(arrData(0)) = arrData(0) Then
'TargetRow = ActiveWorkbook.Worksheets.Cells(.Rows.Count, "A").Row + 1

If strTemp <> "" Then Range("A" & lngRow) = strTemp
lngRow = lngRow + 1
strTemp = Trim(strData)
Else
strTemp = strTemp & "," & Trim(strData)
End If
Loop
Close #intFile
Loop
Close #intIndex
Range("A" & lngRow) = strTemp

End Sub


Ahh I found where my error is, but I just don't know how to fix it.
The line 29:
Open "C:\Documents and Settings\User\My Documents\Scanned Pages\" &
arrIndexNum(0) For Input As #intFile
I replaced arrIndexNum(0) with erroneous data and it still came up
with the same error. Now what is the correct syntax that I need to
use?
 
M

Matt P

Ahh I found where my error is, but I just don't know how to fix it.
The line 29:
Open "C:\Documents and Settings\User\My Documents\Scanned Pages\" &
arrIndexNum(0) For Input As #intFile
I replaced arrIndexNum(0) with erroneous data and it still came up
with the same error.   Now what is the correct syntax that I need to
use?

Hmm actually its not that because I tried putting the direct address
to the file name and that didn't work either. Is it because I used
FreeFile twice?
 
M

Matt P

Ahh I found where my error is, but I just don't know how to fix it.
The line 29:
Open "C:\Documents and Settings\User\My Documents\Scanned Pages\" &
arrIndexNum(0) For Input As #intFile
I replaced arrIndexNum(0) with erroneous data and it still came up
with the same error.   Now what is the correct syntax that I need to
use?

Ok I am sorry I figured out my own question... all I had to do was
put:
intFile = FreeFile + 1
intIndex = FreeFile

Which was to get them on a different number, wow it gets tricky
sometimes when you don't understand the background processes! Little
by little :)
 
J

Jacob Skaria

Mike

Freefile+1 need not be free always..

You are calling freefile and assigning it to intFile and without opening a
file you getting the freefile again will allocate the same number. You can
get the free file number once you open the file...
You should be using this the below manner

intFile = Freefile
Open <filename> for Input As #intFile
intInexFile = Freefile
Open <filename> for Input As #intIndexFile



If this post helps click Yes
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top