excel - Call sub not working the same as running macro by itself -
i have sub works fine when run stand alone macro if call
call selectfolderupdatedata
it not exacte part
selectedfolder = getfolder("c:\users\tim\desktop\sampleco 360\360 macro\360 compiled repository\")
it gos directly
call updateallworkbooks(selectedfolder)
sub selectfolderupdatedata() selectedfolder = getfolder("c:\users\tim\desktop\sampleco 360\360 macro\360 compiled repository\") call updateallworkbooks(selectedfolder) end sub
thanks
edit
here whole thing
sub selectfolderupdatedata() dim fso object dim selectedfolder$ set fso = createobject("scripting.filesystemobject") set selectedfolder = getfolder("c:\users\tim\desktop\sampleco 360\360 macro\360 compiled repository\") call updateallworkbooks(selectedfolder) end sub function getfolder(strpath string) string dim fldr filedialog dim sitem string set fldr = application.filedialog(msofiledialogfolderpicker) fldr .title = "select folder" .allowmultiselect = false .initialfilename = strpath if .show <> -1 goto nextcode sitem = .selecteditems(1) end nextcode: getfolder = sitem set fldr = nothing end function function updateallworkbooks(workdir) dim fso, f, fc, fl dim newname string, appstr string, subdir string on error goto updateallworkbooks_error subdir = workdir & "\" & "convertedfiles" subdir = workdir if not fexists(subdir) mkdir subdir end if application.screenupdating = false set fso = createobject("scripting.filesystemobject") set f = fso.getfolder(workdir) set fc = f.files each fl in fc if right(fl, 5) = ".xlsx" newname = replace(fl, "xlsx", "xls") newname = replace(newname, workdir, subdir) if fexists(newname) appstr = format(now, "hhmmss") & ".xls" newname = replace(newname, ".xls", appstr) end if application.displayalerts = false workbooks.open filename:=fl activeworkbook.saveas filename:=newname, fileformat:=xlexcel8, _ password:="", writerespassword:="", readonlyrecommended:=false, _ createbackup:=false activeworkbook.save activeworkbook.close application.displayalerts = true end if next application.screenupdating = true on error goto 0 exit function updateallworkbooks_error: msgbox "error " & err.number & " (" & err.description & ") in procedure updateallworkbooks of module module2" end function function fexists(newname string) boolean dim tester integer on error resume next tester = getattr(newname) select case err.number case = 0 fexists = true case else fexists = false end select on error goto 0 end function
then using following call
sub run() call copysheets call selectfolderupdatedata call deletexlxs end sub
it looks you're working string paths. end, i'm not sure why you're using getfolder
method of filesystemobject.
instead, can use string, like:
sub selectfolderupdatedata() dim selectedfolder$ selectedfolder ="c:\users\tim\desktop\sampleco 360\360 macro\360 compiled repository\" call testtoseeifthisworks(selectedfolder) call updateallworkbooks(selectedfolder) end sub sub testtoseeifthisworks(workdir string) msgbox workdir end sub
revision #1 working me (not testing updateallworkbooks
yet. remove set
set selectedfolder
. error because selectedfolder
string, not object.
also, not need filesystemobject
in subroutine (because not use it).
sub selectfolderupdatedata() dim selectedfolder$ selectedfolder = getfolder("c:\users\david_zemens\desktop\") 'call updateallworkbooks(selectedfolder) end sub function getfolder(strpath string) string dim fldr filedialog dim sitem string set fldr = application.filedialog(msofiledialogfolderpicker) fldr .title = "select folder" .allowmultiselect = false .initialfilename = strpath if .show <> -1 goto nextcode sitem = .selecteditems(1) end nextcode: getfolder = sitem set fldr = nothing end function
Comments
Post a Comment