Solved

VB invalid procedure call or argument

Posted on 2014-09-10
9
98 Views
Last Modified: 2015-05-19
The code below was created to perform a directory listing on a local folder then output it comma delimited to a file on the network. It all works fine unless the listing comes across an invalid file name. In this case error 800A0005 (Invalid procedure call or argument is thrown up on line 14 char 2. Is there some method to ignore such a file or change how the data is output to allow its inclusion. If the only method is to output to an un-delimited text file that would be ok too. I have limited experience so if possible to resolve please modify. All I really need is an out to a file with the directory contents, no bells or whistles if that's what it takes.

Regards
S

Set objFSO = CreateObject("Scripting.FileSystemObject")
 Dim WshNetwork
 Set WshNetwork = CreateObject("WScript.Network")
 ComputerName = WshNetwork.ComputerName

 set WshShell = WScript.CreateObject("WScript.Shell")
 strDesktop = WshShell.SpecialFolders ("Desktop")

 strRootFolder = strDesktop & "\FOLDER"
 strOutputFile = "\\serverdc02\office\SoftHardAudit\ConfDir\LaptopConfDirListings" & "\" & computername & "DirListing.csv"
 strResults = ""
 EnumerateFolder(strRootFolder)
 Set objOutput = objFSO.CreateTextFile(strOutputFile, True)
 objOutput.Write strResults
 objOutput.Close

 Sub EnumerateFolder(objFolder)
       For Each objFile In objFSO.GetFolder(objFolder).Files
             If strResults = "" Then
                   strResults = """" & Replace(objFile.Path, "\", """,""") & """"
             Else
                   strResults = strResults & VbCrLf & """" & Replace(objFile.Path, "\", """,""") & """"
             End If
       Next
       For Each objSubFolder In objFSO.GetFolder(objFolder).SubFolders
             EnumerateFolder objSubFolder
       Next
 End Sub

Open in new window

0
Comment
Question by:SimonJohnG
  • 4
  • 4
9 Comments
 
LVL 48

Accepted Solution

by:
Vitor Montalvão earned 500 total points
ID: 40314263
If you don't want to have an error handling there, then just add "On Error Resume Next" to ignore possible errors.
.
.
.
On Error Resume Next
objOutput.Write strResults
 objOutput.Close

Open in new window

0
 

Author Comment

by:SimonJohnG
ID: 40314270
Hi Vitor,

Where would I place this?

Regards
S
0
 
LVL 48

Expert Comment

by:Vitor Montalvão
ID: 40314275
Should be in the line before you get the error. Should be line 13, right?
0
Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:SimonJohnG
ID: 40314492
Thank you but is there any method so the directory listing can continue? Say all files except those that cannot be successfully listed?
0
 
LVL 48

Expert Comment

by:Vitor Montalvão
ID: 40314502
Then I think you need to check for those exceptions in your EnumerateFolder procedure, inside the For Each objFile loop.
0
 

Author Comment

by:SimonJohnG
ID: 40314573
If only I knew how to do that which I don't.

Thank you  for the suggestion
0
 

Author Comment

by:SimonJohnG
ID: 40314710
Just noticed that the files are not invalid file names, they are filenames with Japanese characters, anyway of getting around this?

Regards
S
0
 
LVL 48

Expert Comment

by:Vitor Montalvão
ID: 40314723
Not really. Sorry.
0
 
LVL 12

Expert Comment

by:jkaios
ID: 40315897
Just noticed that the files are not invalid file names, they are filenames with Japanese characters, anyway of getting around this?

Since the OS doesn't allow naming a file with certain reserved characters (such as \/:*?""<>|) that's probably why you're getting that error.  So what you have to do is simply remove any of these chars from the fileaname before attempting to create the file.

Public Function removeCraps(ByVal sMyString, _
                            Optional ByVal CRAPS = "\/:*?""<>|", _
                            Optional ByVal sReplaceWith)
   
   Dim ii
   
   For ii = 1 To Len(CRAPS)
      sMyString = Replace(sMyString, Mid$(CRAPS, ii, 1), sReplaceWith)
   Next
   
   removeCraps = sMyString

End Function

Open in new window


Now, on line 13, simply:

strOutputFile = RemoveCraps(strOutputFile)
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Hello again, all.  For those of you that have been following along, you'll know that this is my third article on this topic (though it is not Part III).  This article is sort of remedial, and probably the topic with which I should have started the s…
When it comes to writing scripts for a Client/Server computing environment it is essential to consider some way of enabling the authentication functionality within a script. This sort of consideration mainly comes into the picture when we are dealin…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

821 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