Solved

How to make this function loop throght column A in a excel spread sheet

Posted on 2011-09-12
8
262 Views
Last Modified: 2012-05-12
Hello everyone ,
I trying to call this function inside a loop but I cannot make it works, basically what I 'd like to do is call this function for every cell in the selected range. I have attached the code please have look.
May anyone help me please?
Thanks in advance
Public Function GetFileProperty(myFile As String, myType As String) As String

    'This creates an instance of the MS Scripting Runtime FileSystemObject class
    Set oFS = CreateObject("Scripting.FileSystemObject")

    Select Case UCase(Trim(myFile))
        Case "CREATED"
            GetFileProperty = oFS.GetFile(myFile).DateCreated
        Case "MODIFIED"
            GetFileProperty = oFS.GetFile(myFile).DateLastModified
        Case "ACCESSED"
            GetFileProperty = oFS.GetFile(myFile).DateLastAccessed
        Case "SIZE"
            GetFileProperty = oFS.GetFile(myFile).Size
        Case Else
            GetFileProperty = "txt"
    End Select
End Function



 

Public Sub SperiamoLoop()

    Dim MyCell As Variant, Rng As Range
    Set Rng = Sheets("Sheet1").Range("A2:A4") '''''sets the range to use
    For Each MyCell In Rng ''''checks each cell in range
        If MyCell <> "" Then '''''will only do something if the cell is not blank
            Call GetFileProperty(myFile, myType) '''Put your code here
        Else '''''if cell is equal to blank
            Exit Function ''''then quit macro
        End If
    Next
End Sub

Open in new window

0
Comment
Question by:nassio1985
  • 3
  • 2
  • 2
  • +1
8 Comments
 
LVL 4

Expert Comment

by:GeoffHarper
ID: 36521987
First off, I see that it will not loop through all the cells in range if any are blank; it will stop at the first blank one.  I.e. you need to do away with the ELSE.
If MyCell <> "" Then '''''will only do something if the cell is not blank
            Call GetFileProperty(myFile, myType) '''Put your code here
        End If

Open in new window

0
 
LVL 18

Assisted Solution

by:Cluskitt
Cluskitt earned 350 total points
ID: 36521998
2 things are wrong with your code.
1) In the SperiamoLoop Sub, you have an if. The else clause is Exit Function. This is wrong. The If clause is inside the Sub, not the Function. You have to change it to Exit Sub or (as I think you want to) nothing at all, so it can continue to loop. So, basically, change to exit sub if you want to cancel on the first blank cell, or remove the else/exit lines to just keep looping.
2) A function returns a value. That means that you need to assign it. Your function is defined as string, so you need to either dump it in a string variable, or dump it in a cell. Something like Range(MyCell).OffSet(0,1)=GetFileProperty(myFile, myType)
0
 
LVL 76

Expert Comment

by:GrahamSkan
ID: 36522011
How do the myFile and myType variables get their values?
0
 

Author Comment

by:nassio1985
ID: 36522084
TO GrahamSkan:
 myFile and mtType get their values from the spread sheet column A.

TO Cluskitt:
Sorry but let's say that I'm a newbie so could please be more specific, how shall I change the code?

To GeoffHarper:
I know that if one cell in the loop in blanck it will skip it, I have done to put an error check, but the range it's a list made by myself so there will not  any black cells.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 18

Assisted Solution

by:Cluskitt
Cluskitt earned 350 total points
ID: 36522358
Ok, without knowing how they get their values from column a (seeing as it's two values in one column), try to adapt this into your needs (I will assume data in column A is like-"filename/type":

Public Function GetFileProperty(myFile As String, myType As String) As String
    'This creates an instance of the MS Scripting Runtime FileSystemObject class
    Set oFS = CreateObject("Scripting.FileSystemObject")
    Select Case UCase(Trim(myFile))
        Case "CREATED"
            GetFileProperty = oFS.GetFile(myFile).DateCreated
        Case "MODIFIED"
            GetFileProperty = oFS.GetFile(myFile).DateLastModified
        Case "ACCESSED"
            GetFileProperty = oFS.GetFile(myFile).DateLastAccessed
        Case "SIZE"
            GetFileProperty = oFS.GetFile(myFile).Size
        Case Else
            GetFileProperty = "txt"
    End Select
End Function

Public Sub SperiamoLoop()
    Dim MyCell As Variant, Rng As Range
    Dim myFile, myType As String
    Set Rng = Sheets("Sheet1").Range("A2:A4")
    For Each MyCell In Rng
        If MyCell <> "" Then
            myFile = Left(MyCell, InStr(MyCell, "/") - 1)
            myType = Mid(MyCell, InStr(MyCell, "/") + 1)
            MyCell.Offset(0, 1) = GetFileProperty(myFile, myType)
        End If
    Next
End Sub

Open in new window

0
 

Accepted Solution

by:
nassio1985 earned 0 total points
ID: 36522503
It's giving this error "ByRef argument type mismatch"?
0
 

Author Closing Comment

by:nassio1985
ID: 36553425
thanks a lot
0
 
LVL 76

Expert Comment

by:GrahamSkan
ID: 36522551
myFile is not defined without specifying the type, so is a Variant in SperiamoLoop; while GetFileProperty expects a string.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Some code to ensure data integrity when using macros within Excel. Also included code that helps secure your data within an Excel workbook.
This Micro Tutorial will demonstrate in Microsoft Excel how to add style and sexy appeal to horizontal bar charts.
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now