Renaming File Statement -How does it work??

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Could someone please explain how this Excel 2003 VBA routine works to rename
a file.
Assume oldfilename.txt exist in the C:\temp directory, when the name
statement executes, it is renamed to "newfilename.txt"

Sub RenameTheFiles()
ChDir "C:\Temp\"
Name "oldfilename.txt" As "newfilename.txt"
End Sub

Originally I was using a multi step routine using the FileSystemObject and
setting a fileObject.Name = new name, thus performing the rename. The
simplicity of this code is confusing what I thought I knew about the object
models. Specifically, Name in the above routine is a method? How is it
associated, what is the object or how does it know to rename the file in the
temp directory??? Can anyone give me the complete syntax of the name
statement? I assume there to be several defaults omitted. What role does the
"AS" play? Is this some kind of shorthand for a SET statement?

Puzzled!

Fred Krause.
 
Hi Fred,

The easiest thing to do would be to stick your cursor on Name in your
code module and press F1. This will bring up the VBA help topic with all the
details. The short answer to your question is that this is a legacy BASIC
function that's not a method of any object and it has no other arguments.

In the case you've shown, it uses the C:\Temp directory by default
because you haven't specified a directory in your arguments and you've set
the C:\Temp directory as the current directory with the ChDir statement. You
could also have done this instead and made it one line of code:

Name "C:\Temp\oldfilename.txt" As "C:\Temp\newfilename.txt"

--
Rob Bovey, Excel MVP
Application Professionals
http://www.appspro.com/

* Take your Excel development skills to the next level.
* Professional Excel Development
http://www.appspro.com/Books/Books.htm
 
This is one of those places where I sometimes like to use a DOS Shell.
Something like this...

application.shell("Command.com /c ren C:\Test.xls C:\Test.txt")

The advantage of using a shell is that you can do mutiple files at once...

application.shell("Command.com /c ren C:\*.xls C:\*.txt")

Depends on what you are trying to do as to whether a DOS shell is the best
solution or not...
 
application.shell("Command.com /c ren C:\Test.xls C:\Test.txt")

gives me an error message: "Object doesn't support this property or method"
 
I removed Application. and it worked

thanks

William Benson said:
application.shell("Command.com /c ren C:\Test.xls C:\Test.txt")

gives me an error message: "Object doesn't support this property or
method"
 
As Rob [Bovey] pointed out, it is a legacy capability from the DOS
days. No object associated with them, just native Basic statements.

Yes, Name can be easier to use than the FileSystemObject capability,
but it does have more subtleties attached to it. For one, ChDir
doesn't affect the current *drive* which is given by ChDrive. Use of a
filename without the full path qualification means that VBA will use
the current *drive* and the current path for *that* drive. May not be
what you meant to do!

As far as needing multiple steps with FSO goes, what people don't
realize, often because of the programming dogma they've been exposed
to, is that those multiple steps are often not necessary. For example,

CreateObject("scripting.filesystemobject").movefile _
"g:\temp\book1.xls", "g:\book1.xls"

is sufficient. Even if one wanted to carry out multiple steps with
this one instance of FSO, one could use

With CreateObject("scripting.filesystemobject")
.movefile _
"g:\temp\book1.xls", "g:\book1.xls"
.movefile _
"g:\book1.xls", "g:\temp\book1.xls"
End With

Of course, in this case, I am relying on the compiler to clean up the
FSO object for me. But then I rely on it for a lot more than just this
cleanup. ;-)


--
Regards,

Tushar Mehta
www.tushar-mehta.com
Excel, PowerPoint, and VBA add-ins, tutorials
Custom MS Office productivity solutions
 
dogma :-) I love it!

Tushar Mehta said:
As Rob [Bovey] pointed out, it is a legacy capability from the DOS
days. No object associated with them, just native Basic statements.

Yes, Name can be easier to use than the FileSystemObject capability,
but it does have more subtleties attached to it. For one, ChDir
doesn't affect the current *drive* which is given by ChDrive. Use of a
filename without the full path qualification means that VBA will use
the current *drive* and the current path for *that* drive. May not be
what you meant to do!

As far as needing multiple steps with FSO goes, what people don't
realize, often because of the programming dogma they've been exposed
to, is that those multiple steps are often not necessary. For example,

CreateObject("scripting.filesystemobject").movefile _
"g:\temp\book1.xls", "g:\book1.xls"

is sufficient. Even if one wanted to carry out multiple steps with
this one instance of FSO, one could use

With CreateObject("scripting.filesystemobject")
.movefile _
"g:\temp\book1.xls", "g:\book1.xls"
.movefile _
"g:\book1.xls", "g:\temp\book1.xls"
End With

Of course, in this case, I am relying on the compiler to clean up the
FSO object for me. But then I rely on it for a lot more than just this
cleanup. ;-)


--
Regards,

Tushar Mehta
www.tushar-mehta.com
Excel, PowerPoint, and VBA add-ins, tutorials
Custom MS Office productivity solutions

Could someone please explain how this Excel 2003 VBA routine works to
rename
a file.
Assume oldfilename.txt exist in the C:\temp directory, when the name
statement executes, it is renamed to "newfilename.txt"

Sub RenameTheFiles()
ChDir "C:\Temp\"
Name "oldfilename.txt" As "newfilename.txt"
End Sub

Originally I was using a multi step routine using the FileSystemObject
and
setting a fileObject.Name = new name, thus performing the rename. The
simplicity of this code is confusing what I thought I knew about the
object
models. Specifically, Name in the above routine is a method? How is it
associated, what is the object or how does it know to rename the file in
the
temp directory??? Can anyone give me the complete syntax of the name
statement? I assume there to be several defaults omitted. What role does
the
"AS" play? Is this some kind of shorthand for a SET statement?

Puzzled!

Fred Krause.
 
Back
Top