2016-01-06 4 views
0

У меня есть сценарий, который я запускаю, который открывает файл xls (независимо от имени файла) в папке с именем в коде и затем сохраняет этот файл с новым именем. До вчерашнего дня он работал нормально. Теперь я получаю сообщение об ошибке выполнения VBScript, который говорит требуетсяСохраните открытую книгу с другим именем файла (SaveAs)

объект: «»

WB

Любые идеи о том, что пошло не так, была бы оценена.

'Opens Excel 
Set app = CreateObject("Excel.Application") 


'sets variable to Division Market Share Report v2.0.xls 
strPath_Excel = "C:\Users\DSO7761\Desktop\Ideas\Market Share Report Automation\Market Share Reports\Division Market Share Report v2.0.xls" 

'Opens Division Market Share Report v2.0.xls 
Set objWB2 = app.Workbooks.Open(strPath_Excel) 

app.Visible = False 
app.DisplayAlerts = False 

'This section opens files with "xls" extension in the C:\Users\DSO7761\Desktop\Ideas\Market Share Report Automation\Market Share Reports\Balloon directory 
Set fso = CreateObject("Scripting.FileSystemObject") 

For Each f In fso.GetFolder("C:\Users\DSO7761\Desktop\Ideas\Market Share Report Automation\Market Share Reports\Balloon").Files 
    If LCase(fso.GetExtensionName(f)) = "xls" Then 
    Set wb = app.Workbooks.Open(f.Path) 

    'This saves the current month BOBJ report with a new name ("...Previous Month") in order to agree with the file name coded into the macro that runs next 
    'This has to be done here because there is a specific hard-coded reference to the file name in the subsequently run macro 
    wb.SaveAs "C:\Users\DSO7761\Desktop\Ideas\Market Share Report Automation\Market Share Reports\Balloon\Division Balloon Market Share Report Previous Month.xls" 
    End If 

    'This runs the CopyPasteMonthlyData macro saved to the Division Market Share Report v2.0.xls workbook 
    app.Run "'Division Market Share Report v2.0.xls'!CopyPasteMonthlyDataBalloon" 

    'This saves the updated Balloon Market Share Report Previous Month file and closes it 
    objWB2.Save 
    objWB2.Close True 
    wb.Close True 
Next 

'This section moves all files in the C:\Users\DSO7761\Desktop\Ideas\Market Share Report Automation\Market Share Reports\Balloon path to the 2015 folder in the same path 
Set fldr = fso.GetFolder("C:\Users\DSO7761\Desktop\Ideas\Market Share Report Automation\Market Share Reports\Balloon") 
Set Collec_Files = fldr.Files 
For Each File in Collec_Files 
    fso.MoveFile "C:\Users\DSO7761\Desktop\Ideas\Market Share Report Automation\Market Share Reports\Balloon\*.xlsx", "C:\Users\DSO7761\Desktop\Ideas\Market Share Report Automation\Market Share Reports\Balloon\2015" 
    fso.DeleteFile "C:\Users\DSO7761\Desktop\Ideas\Market Share Report Automation\Market Share Reports\Balloon\*" 
Next 

app.Quit 

Set app = Nothing 
Set objWB2 = Nothing 
Set wb = Nothing 
Set fso = Nothing 

'Message Box with just prompt message 
x=MsgBox("The BAlloon Marketshare Report update is complete.",vbInformation,"Script Run Successfully") 

ответ

1
For Each f In fso.GetFolder("C:\Use...oon").Files 
    If LCase(fso.GetExtensionName(f)) = "xls" Then 
    Set wb = app.Workbooks.Open(f.Path) 
    ... 
    wb.SaveAs "C:\Use...nth.xls" 
    End If 
    ... 
    wb.Close True 
Next 

Вы открывать и сохранять файлы, только если они имеют расширение .xls, но попытайтесь закрыть объект wb для каждого файла, независимо от того, открыт ли вы его первым или нет. Поместите wb.Close Trueвнутри в If заявление:

For Each f In fso.GetFolder("C:\Use...oon").Files 
    If LCase(fso.GetExtensionName(f)) = "xls" Then 
    Set wb = app.Workbooks.Open(f.Path) 
    ... 
    wb.SaveAs "C:\Use...nth.xls" 
    ... 
    wb.Close True 
    End If 
Next 

Кроме того, вы должны сохранить и закрыть objWB2после цикл завершается, или вы можете столкнуться с той же проблемой, с этой переменной, а также.

+0

Спасибо, Ансгар! Был еще один файл (не .xls) в той же папке, где ранее был только один .xls-файл, и после того, как я прочитал ваш ответ и удалил другой файл, скрипт работал, как и прежде, без переупорядочения кода. Я УЗНАЛ ЧТО-ТО НОВОЕ СЕГОДНЯ! Еще раз спасибо! –