Ошибка индекса вне диапазона - метод saveas - PullRequest
0 голосов
/ 26 апреля 2018

Попытка заставить Excel «сохранить» книгу, используя следующий код:

Sub SaveWorkbook(my_FileName, sFolder)

Dim workbook_Name As String
Dim fName As String

fName = CStr(Range("B9").Value)
workbook_Name = "\" & fName & ".xls"

Workbooks(my_FileName).SaveAs fileName:=sFolder & workbook_Name

End Sub

my_FileName и sFolder передаются другой функцией:

Sub ProduceDoc()

MsgBox "Please Select the File that Contains the Document"
my_FileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*,*.xsl*,*.xm*")

sFolder = "C:\Users\" & InputBox("Please type your employee id") & "\Desktop\" & InputBox("What will you name your folder?")

Workbooks.Open (my_FileName)

SaveWorkbook (my_FileName)

End Sub

В данный момент для строки выдается ошибка:

Workbooks(my_FileName).SaveAs fileName:=sFolder & workbook_Name

и я не могу понять, почему. Я предполагаю, что это происходит, потому что я забыл что-то простое.

Что я сделал до сих пор, чтобы проверить:

Проверено, что my_FileName успешно передается функции SaveWorkbook(), и это так. Мне удалось открыть документ, указанный в функции ProduceDoc(), и заставить my_FileName напечатать в определенной ячейке в пределах SaveWorkbook()

Это все, что у меня есть в наборе инструментов. Какие-нибудь мысли?

Edit: я теперь обновил строку Workbooks(my_FileName).SaveAs fileName:=sFolder & workbook_Name, чтобы показать новое состояние, а также вызывается sFolder. Это все еще дает ту же ошибку.

1 Ответ

0 голосов
/ 30 апреля 2018

Я понял это.

Все правильно отформатировано во всех переменных, кроме этих двух строк:

workbook_Name = "\" & fName & ".xls"

Workbooks(my_FileName).SaveAs fileName:=sFolder & workbook_Name

Excel не понравилось здесь несколько вещей, поэтому я постарался сделать его как можно более простым. Я объединил объединение sFolder и workbook_Name в одну переменную, удалил ".xls" и добавил аргумент fileFormat:=xlWorkbookNormal в метод SaveAs.

То, что я действительно исправил, это то, как я назвал метод SaveAs. Изменено это на «ActiveWorkbook», а не то, что было ранее.

workbook_Name = sFolder & "\" & fName

ActiveWorkbook.SaveAs fileName:=workbook_Name, fileFormat:=xlWorkbookNormal

Теперь все ведет себя как положено!

надеюсь, это поможет любому, кто столкнется с этим в будущем!

...