首页 > 解决方案 > 下标超出范围错误 - saveas 方法

问题描述

尝试使用以下代码让 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()

这就是我在工具箱 atm 中的全部内容。有什么想法吗?

编辑:我现在更新了该行Workbooks(my_FileName).SaveAs fileName:=sFolder & workbook_Name以显示新状态,并且 sFolder 也被调用。它仍然给出同样的错误。

标签: excelvba

解决方案


我想到了。

除以下两行外,所有变量中的所有内容均已正确格式化:

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

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

Excel 不喜欢这里的一些东西,所以我尽量使它尽可能基本。sFolder我将和的串联组合workbook_Name到一个变量中, removed ".xls"并将fileFormat:=xlWorkbookNormal参数添加到 SaveAs 方法中。

我认为真正解决这个问题的是我如何调用 SaveAs 方法。将其更改为“ActiveWorkbook”,而不是以前的。

workbook_Name = sFolder & "\" & fName

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

现在一切都按预期运行!

希望这对将来遇到此问题的人有所帮助!


推荐阅读