Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Help to improve macro

Hi
I found this cool macro on this group that makes a list of all files in
a folder. With each file name in a separate row. I would be very
grateful if any one can make suitable changes so that each row contains
a hyper link to the file.
TIA

Unni

Sub ListIndexFiles()
'Lists all file names in the folder on the active sheet
Dim FileName As String
Dim r As Integer

'Range("a2:a5").ClearContents

r = 2
With Application.FileSearch
.NewSearch
.LookIn = "C:\Documents and Settings\Administrator\My
Documents"
.FileName = "*.doc"
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
FileName = Mid(.FoundFiles(i), 18)
Cells(r, 1) = FileName
r = r + 1
Next i
End If
End With
End Sub

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Help to improve macro

Opps!
also can it look in all sub-folders of "C:\Documents and
Settings\Administrator\My Documents"

TIA

Unni


unni5959 wrote:
Hi
I found this cool macro on this group that makes a list of all files in
a folder. With each file name in a separate row. I would be very
grateful if any one can make suitable changes so that each row contains
a hyper link to the file.
TIA

Unni

Sub ListIndexFiles()
'Lists all file names in the folder on the active sheet
Dim FileName As String
Dim r As Integer

'Range("a2:a5").ClearContents

r = 2
With Application.FileSearch
.NewSearch
.LookIn = "C:\Documents and Settings\Administrator\My
Documents"
.FileName = "*.doc"
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
FileName = Mid(.FoundFiles(i), 18)
Cells(r, 1) = FileName
r = r + 1
Next i
End If
End With
End Sub


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,302
Default Help to improve macro

Hi Unni,

Try:

'<<===========================

Public Sub ListIndexFiles()

'// Lists all file names in the folder and sub-folders on the
'// active sheet and inserts a hyperlink to the returned files

Dim FName As String
Dim r As Integer
Dim i As Long
Dim myPath As String
Const strFileType As String = "xls" '<<===== CHANGE
With ActiveSheet.Columns(1)
..Hyperlinks.Delete
..ClearContents
End With

myPath = "C:\Documents and Settings\" & _
"Administrator\MyDocuments"

r = 2
With Application.FileSearch
.NewSearch
.LookIn = myPath
.SearchSubFolders = True
.FileName = "*." & strFileType
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
FName = Mid(.FoundFiles(i), 1)
Cells(r, 1) = Mid(FName, Len(myPath) + 1, 255)

ActiveSheet.Hyperlinks.Add Anchor:=Cells(r, 1), _
Address:=FName, _
TextToDisplay:=Cells(r, 1).Value
r = r + 1
Next i
End If
End With
End Sub
'<<===========================


---
Regards,
Norman



"unni5959" wrote in message
ups.com...
Opps!
also can it look in all sub-folders of "C:\Documents and
Settings\Administrator\My Documents"

TIA

Unni


unni5959 wrote:
Hi
I found this cool macro on this group that makes a list of all files in
a folder. With each file name in a separate row. I would be very
grateful if any one can make suitable changes so that each row contains
a hyper link to the file.
TIA

Unni

Sub ListIndexFiles()
'Lists all file names in the folder on the active sheet
Dim FileName As String
Dim r As Integer

'Range("a2:a5").ClearContents

r = 2
With Application.FileSearch
.NewSearch
.LookIn = "C:\Documents and Settings\Administrator\My
Documents"
.FileName = "*.doc"
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
FileName = Mid(.FoundFiles(i), 18)
Cells(r, 1) = FileName
r = r + 1
Next i
End If
End With
End Sub




  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default Help to improve macro

Here is a different way, using FSO instead of the flaky FileSearch. It also
searches down into sub-folders and indents the levels.
Option Explicit

Private cnt As Long
Private arfiles
Private level As Long

Sub Folders()
Dim i As Long
Dim sFolder As String
Dim iStart As Long
Dim iEnd As Long
Dim fOutline As Boolean

arfiles = Array()
cnt = -1
level = 1

sFolder = "E:\"
ReDim arfiles(2, 0)
If sFolder < "" Then
SelectFiles sFolder
Application.DisplayAlerts = False
On Error Resume Next
Worksheets("Files").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Worksheets.Add.Name = "Files"
With ActiveSheet
For i = LBound(arfiles, 2) To UBound(arfiles, 2)
If arfiles(0, i) = "" Then
If fOutline Then
Rows(iStart + 1 & ":" & iEnd).Rows.Group
End If
With .Cells(i + 1, arfiles(2, i))
.Value = arfiles(1, i)
.Font.Bold = True
End With
iStart = i + 1
iEnd = iStart
fOutline = False
Else
.Hyperlinks.Add Anchor:=.Cells(i + 1, arfiles(2, i)), _
Address:=arfiles(0, i), _
TextToDisplay:=arfiles(1, i)
iEnd = iEnd + 1
fOutline = True
End If
Next
.Columns("A:Z").ColumnWidth = 5
End With
End If
'just in case there is another set to group
If fOutline Then
Rows(iStart + 1 & ":" & iEnd).Rows.Group
End If

Columns("A:Z").ColumnWidth = 5
ActiveSheet.Outline.ShowLevels RowLevels:=1
ActiveWindow.DisplayGridlines = False

End Sub

'-----------------------------------------------------------------------
Sub SelectFiles(Optional sPath As String)
'-----------------------------------------------------------------------
Static FSO As Object
Dim oSubFolder As Object
Dim oFolder As Object
Dim oFile As Object
Dim oFiles As Object
Dim arPath

If FSO Is Nothing Then
Set FSO = CreateObject("SCripting.FileSystemObject")
End If

If sPath = "" Then
sPath = CurDir
End If

arPath = Split(sPath, "\")
cnt = cnt + 1
ReDim Preserve arfiles(2, cnt)
arfiles(0, cnt) = ""
arfiles(1, cnt) = arPath(level - 1)
arfiles(2, cnt) = level

Set oFolder = FSO.GetFolder(sPath)
Set oFiles = oFolder.Files
For Each oFile In oFiles
cnt = cnt + 1
ReDim Preserve arfiles(2, cnt)
arfiles(0, cnt) = oFolder.Path & "\" & oFile.Name
arfiles(1, cnt) = oFile.Name
arfiles(2, cnt) = level + 1
Next oFile

level = level + 1
For Each oSubFolder In oFolder.Subfolders
SelectFiles oSubFolder.Path
Next
level = level - 1

End Sub

#If VBA6 Then
#Else
'-----------------------------**-----------------------------*-*------
Function Split(Text As String, _
Optional Delimiter As String = ",") As Variant
'-----------------------------**-----------------------------*-*------
Dim i As Long
Dim sFormula As String
Dim aryEval
Dim aryValues

If Delimiter = vbNullChar Then
Delimiter = Chr(7)
Text = Replace(Text, vbNullChar, Delimiter)
End If

sFormula = "{""" & Application.Substitute(Text, Delimiter, """,""") &
"""}"
aryEval = Evaluate(sFormula)
ReDim aryValues(0 To UBound(aryEval) - 1)
For i = 0 To UBound(aryValues)
aryValues(i) = aryEval(i + 1)
Next

Split = aryValues

End Function

'---------------------------------------------------------------------------
Public Function InStrRev(stringcheck As String, _
ByVal stringmatch As String, _
Optional ByVal start As Long = -1)
'---------------------------------------------------------------------------
Dim iStart As Long
Dim iLen As Long
Dim i As Long

If iStart = -1 Then
iStart = Len(stringcheck)
Else
iStart = start
End If

iLen = Len(stringmatch)

For i = iStart To 1 Step -1
If Mid(stringcheck, i, iLen) = stringmatch Then
InStrRev = i
Exit Function
End If
Next i
InStrRev = 0
End Function
'-----------------------------------------------------------------
#End If


--

HTH

RP
(remove nothere from the email address if mailing direct)


"unni5959" wrote in message
ups.com...
Hi
I found this cool macro on this group that makes a list of all files in
a folder. With each file name in a separate row. I would be very
grateful if any one can make suitable changes so that each row contains
a hyper link to the file.
TIA

Unni

Sub ListIndexFiles()
'Lists all file names in the folder on the active sheet
Dim FileName As String
Dim r As Integer

'Range("a2:a5").ClearContents

r = 2
With Application.FileSearch
.NewSearch
.LookIn = "C:\Documents and Settings\Administrator\My
Documents"
.FileName = "*.doc"
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
FileName = Mid(.FoundFiles(i), 18)
Cells(r, 1) = FileName
r = r + 1
Next i
End If
End With
End Sub



  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,302
Default Help to improve macro

Hi Bob,

Here is a different way, using FSO instead of the flaky FileSearch. It
also
searches down into sub-folders and indents the levels.


Given the reported Filesearch problems and the indentation, its ..... "Slam
Dunk!"

---
Regards,
Norman



"Bob Phillips" wrote in message
...
Here is a different way, using FSO instead of the flaky FileSearch. It
also
searches down into sub-folders and indents the levels.
Option Explicit

Private cnt As Long
Private arfiles
Private level As Long

Sub Folders()
Dim i As Long
Dim sFolder As String
Dim iStart As Long
Dim iEnd As Long
Dim fOutline As Boolean

arfiles = Array()
cnt = -1
level = 1

sFolder = "E:\"
ReDim arfiles(2, 0)
If sFolder < "" Then
SelectFiles sFolder
Application.DisplayAlerts = False
On Error Resume Next
Worksheets("Files").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Worksheets.Add.Name = "Files"
With ActiveSheet
For i = LBound(arfiles, 2) To UBound(arfiles, 2)
If arfiles(0, i) = "" Then
If fOutline Then
Rows(iStart + 1 & ":" & iEnd).Rows.Group
End If
With .Cells(i + 1, arfiles(2, i))
.Value = arfiles(1, i)
.Font.Bold = True
End With
iStart = i + 1
iEnd = iStart
fOutline = False
Else
.Hyperlinks.Add Anchor:=.Cells(i + 1, arfiles(2, i)), _
Address:=arfiles(0, i), _
TextToDisplay:=arfiles(1, i)
iEnd = iEnd + 1
fOutline = True
End If
Next
.Columns("A:Z").ColumnWidth = 5
End With
End If
'just in case there is another set to group
If fOutline Then
Rows(iStart + 1 & ":" & iEnd).Rows.Group
End If

Columns("A:Z").ColumnWidth = 5
ActiveSheet.Outline.ShowLevels RowLevels:=1
ActiveWindow.DisplayGridlines = False

End Sub

'-----------------------------------------------------------------------
Sub SelectFiles(Optional sPath As String)
'-----------------------------------------------------------------------
Static FSO As Object
Dim oSubFolder As Object
Dim oFolder As Object
Dim oFile As Object
Dim oFiles As Object
Dim arPath

If FSO Is Nothing Then
Set FSO = CreateObject("SCripting.FileSystemObject")
End If

If sPath = "" Then
sPath = CurDir
End If

arPath = Split(sPath, "\")
cnt = cnt + 1
ReDim Preserve arfiles(2, cnt)
arfiles(0, cnt) = ""
arfiles(1, cnt) = arPath(level - 1)
arfiles(2, cnt) = level

Set oFolder = FSO.GetFolder(sPath)
Set oFiles = oFolder.Files
For Each oFile In oFiles
cnt = cnt + 1
ReDim Preserve arfiles(2, cnt)
arfiles(0, cnt) = oFolder.Path & "\" & oFile.Name
arfiles(1, cnt) = oFile.Name
arfiles(2, cnt) = level + 1
Next oFile

level = level + 1
For Each oSubFolder In oFolder.Subfolders
SelectFiles oSubFolder.Path
Next
level = level - 1

End Sub

#If VBA6 Then
#Else
'-----------------------------**-----------------------------*-*------
Function Split(Text As String, _
Optional Delimiter As String = ",") As Variant
'-----------------------------**-----------------------------*-*------
Dim i As Long
Dim sFormula As String
Dim aryEval
Dim aryValues

If Delimiter = vbNullChar Then
Delimiter = Chr(7)
Text = Replace(Text, vbNullChar, Delimiter)
End If

sFormula = "{""" & Application.Substitute(Text, Delimiter, """,""") &
"""}"
aryEval = Evaluate(sFormula)
ReDim aryValues(0 To UBound(aryEval) - 1)
For i = 0 To UBound(aryValues)
aryValues(i) = aryEval(i + 1)
Next

Split = aryValues

End Function

'---------------------------------------------------------------------------
Public Function InStrRev(stringcheck As String, _
ByVal stringmatch As String, _
Optional ByVal start As Long = -1)
'---------------------------------------------------------------------------
Dim iStart As Long
Dim iLen As Long
Dim i As Long

If iStart = -1 Then
iStart = Len(stringcheck)
Else
iStart = start
End If

iLen = Len(stringmatch)

For i = iStart To 1 Step -1
If Mid(stringcheck, i, iLen) = stringmatch Then
InStrRev = i
Exit Function
End If
Next i
InStrRev = 0
End Function
'-----------------------------------------------------------------
#End If


--

HTH

RP
(remove nothere from the email address if mailing direct)


"unni5959" wrote in message
ups.com...
Hi
I found this cool macro on this group that makes a list of all files in
a folder. With each file name in a separate row. I would be very
grateful if any one can make suitable changes so that each row contains
a hyper link to the file.
TIA

Unni

Sub ListIndexFiles()
'Lists all file names in the folder on the active sheet
Dim FileName As String
Dim r As Integer

'Range("a2:a5").ClearContents

r = 2
With Application.FileSearch
.NewSearch
.LookIn = "C:\Documents and Settings\Administrator\My
Documents"
.FileName = "*.doc"
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
FileName = Mid(.FoundFiles(i), 18)
Cells(r, 1) = FileName
r = r + 1
Next i
End If
End With
End Sub







  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default Help to improve macro

you didn't mention the grouping :-(

Bob


"Norman Jones" wrote in message
...
Hi Bob,

Here is a different way, using FSO instead of the flaky FileSearch. It
also
searches down into sub-folders and indents the levels.


Given the reported Filesearch problems and the indentation, its .....

"Slam
Dunk!"

---
Regards,
Norman



"Bob Phillips" wrote in message
...
Here is a different way, using FSO instead of the flaky FileSearch. It
also
searches down into sub-folders and indents the levels.
Option Explicit

Private cnt As Long
Private arfiles
Private level As Long

Sub Folders()
Dim i As Long
Dim sFolder As String
Dim iStart As Long
Dim iEnd As Long
Dim fOutline As Boolean

arfiles = Array()
cnt = -1
level = 1

sFolder = "E:\"
ReDim arfiles(2, 0)
If sFolder < "" Then
SelectFiles sFolder
Application.DisplayAlerts = False
On Error Resume Next
Worksheets("Files").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Worksheets.Add.Name = "Files"
With ActiveSheet
For i = LBound(arfiles, 2) To UBound(arfiles, 2)
If arfiles(0, i) = "" Then
If fOutline Then
Rows(iStart + 1 & ":" & iEnd).Rows.Group
End If
With .Cells(i + 1, arfiles(2, i))
.Value = arfiles(1, i)
.Font.Bold = True
End With
iStart = i + 1
iEnd = iStart
fOutline = False
Else
.Hyperlinks.Add Anchor:=.Cells(i + 1, arfiles(2, i)),

_
Address:=arfiles(0, i), _
TextToDisplay:=arfiles(1, i)
iEnd = iEnd + 1
fOutline = True
End If
Next
.Columns("A:Z").ColumnWidth = 5
End With
End If
'just in case there is another set to group
If fOutline Then
Rows(iStart + 1 & ":" & iEnd).Rows.Group
End If

Columns("A:Z").ColumnWidth = 5
ActiveSheet.Outline.ShowLevels RowLevels:=1
ActiveWindow.DisplayGridlines = False

End Sub

'-----------------------------------------------------------------------
Sub SelectFiles(Optional sPath As String)
'-----------------------------------------------------------------------
Static FSO As Object
Dim oSubFolder As Object
Dim oFolder As Object
Dim oFile As Object
Dim oFiles As Object
Dim arPath

If FSO Is Nothing Then
Set FSO = CreateObject("SCripting.FileSystemObject")
End If

If sPath = "" Then
sPath = CurDir
End If

arPath = Split(sPath, "\")
cnt = cnt + 1
ReDim Preserve arfiles(2, cnt)
arfiles(0, cnt) = ""
arfiles(1, cnt) = arPath(level - 1)
arfiles(2, cnt) = level

Set oFolder = FSO.GetFolder(sPath)
Set oFiles = oFolder.Files
For Each oFile In oFiles
cnt = cnt + 1
ReDim Preserve arfiles(2, cnt)
arfiles(0, cnt) = oFolder.Path & "\" & oFile.Name
arfiles(1, cnt) = oFile.Name
arfiles(2, cnt) = level + 1
Next oFile

level = level + 1
For Each oSubFolder In oFolder.Subfolders
SelectFiles oSubFolder.Path
Next
level = level - 1

End Sub

#If VBA6 Then
#Else
'-----------------------------**-----------------------------*-*------
Function Split(Text As String, _
Optional Delimiter As String = ",") As Variant
'-----------------------------**-----------------------------*-*------
Dim i As Long
Dim sFormula As String
Dim aryEval
Dim aryValues

If Delimiter = vbNullChar Then
Delimiter = Chr(7)
Text = Replace(Text, vbNullChar, Delimiter)
End If

sFormula = "{""" & Application.Substitute(Text, Delimiter, """,""") &
"""}"
aryEval = Evaluate(sFormula)
ReDim aryValues(0 To UBound(aryEval) - 1)
For i = 0 To UBound(aryValues)
aryValues(i) = aryEval(i + 1)
Next

Split = aryValues

End Function


'---------------------------------------------------------------------------
Public Function InStrRev(stringcheck As String, _
ByVal stringmatch As String, _
Optional ByVal start As Long = -1)

'---------------------------------------------------------------------------
Dim iStart As Long
Dim iLen As Long
Dim i As Long

If iStart = -1 Then
iStart = Len(stringcheck)
Else
iStart = start
End If

iLen = Len(stringmatch)

For i = iStart To 1 Step -1
If Mid(stringcheck, i, iLen) = stringmatch Then
InStrRev = i
Exit Function
End If
Next i
InStrRev = 0
End Function
'-----------------------------------------------------------------
#End If


--

HTH

RP
(remove nothere from the email address if mailing direct)


"unni5959" wrote in message
ups.com...
Hi
I found this cool macro on this group that makes a list of all files in
a folder. With each file name in a separate row. I would be very
grateful if any one can make suitable changes so that each row contains
a hyper link to the file.
TIA

Unni

Sub ListIndexFiles()
'Lists all file names in the folder on the active sheet
Dim FileName As String
Dim r As Integer

'Range("a2:a5").ClearContents

r = 2
With Application.FileSearch
.NewSearch
.LookIn = "C:\Documents and Settings\Administrator\My
Documents"
.FileName = "*.doc"
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
FileName = Mid(.FoundFiles(i), 18)
Cells(r, 1) = FileName
r = r + 1
Next i
End If
End With
End Sub







  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Help to improve macro

Hi
Thank you Norman, Thank you Bob.

I am at loss of words!!

While Norman's macro fits what I was trying to do achieve perfectly,
Bob your code just blew mw away!! (Not just me... my whole department).
Poor ignoramus like us had no clue excel could do things like this. In
short you have just instilled in all of us a new respect for excel and
Excel newsgroup.

Thanks again

Unni

  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default Help to improve macro

Hi Unni,

I am sure I can speak for Norman as well when I say thank you for those kind
words. I am sitting here with a big grin on my face.

Cheers

Bob


"unni5959" wrote in message
oups.com...
Hi
Thank you Norman, Thank you Bob.

I am at loss of words!!

While Norman's macro fits what I was trying to do achieve perfectly,
Bob your code just blew mw away!! (Not just me... my whole department).
Poor ignoramus like us had no clue excel could do things like this. In
short you have just instilled in all of us a new respect for excel and
Excel newsgroup.

Thanks again

Unni



  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Help to improve macro


Hi Bob/Norman,
Thanks a lot for the macro. I was also looking for one like this. I
works great.

Can you please help me code anoher (may be seperately!) new macro whic
will delete the hyperlink as it is clicked by the user (while othe
hyperlinks remain in the sheet)?

Thanks a lot.

Twinkl

--
twinklejm
-----------------------------------------------------------------------
twinklejmj's Profile: http://www.excelforum.com/member.php...fo&userid=2708
View this thread: http://www.excelforum.com/showthread.php?threadid=39637

  #10   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 88
Default Help to improve macro

This will delete the hyperlink and clear the cell:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Range(Target.Parent.Address).Value = ""
End Sub

or to delete the link but leave the hyperlink text in the cell:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Target.delete
End Sub

This is worksheet event code. Right click the sheet, select View Code
and paste the code in there.

Hope this helps
Rowan

twinklejmj wrote:
Hi Bob/Norman,
Thanks a lot for the macro. I was also looking for one like this. It
works great.

Can you please help me code anoher (may be seperately!) new macro which
will delete the hyperlink as it is clicked by the user (while other
hyperlinks remain in the sheet)?

Thanks a lot.

Twinkle


Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Can you help me to improve this macro? Dario de Judicibus[_3_] Excel Programming 5 June 15th 05 10:59 AM
Improve code rjamison Excel Programming 0 June 14th 05 12:14 AM
Improve code Gareth Excel Programming 5 April 20th 05 03:41 PM
Need to improve a formula Brian Excel Worksheet Functions 2 December 9th 04 07:17 PM
Please help me improve macro to convert spreadsheet to tabular for Nigel Excel Programming 1 July 30th 04 02:54 PM


All times are GMT +1. The time now is 11:20 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"