Solved

VB invalid procedure call or argument

Posted on 2014-09-10
9
93 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 47

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 47

Expert Comment

by:Vitor Montalvão
ID: 40314275
Should be in the line before you get the error. Should be line 13, right?
0
Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

 

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 47

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 47

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

VMware Disaster Recovery and Data Protection

In this expert guide, you’ll learn about the components of a Modern Data Center. You will use cases for the value-added capabilities of Veeam®, including combining backup and replication for VMware disaster recovery and using replication for data center migration.

Question has a verified solution.

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

I met Paul Devereux (@pdevereux) today when I responded to his tweet asking “Anybody know how to automate adding files from disk to a folder in #outlook  ?”.  I replied back and told Paul that using automation, in this case scripting, to add files t…
Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

778 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