批量导入多个Excel文件到Access表时出现Wend无While编译错误如何解决
报错原因
VBA中存在两种条件循环的语法,你的代码混用了两种语法的配对规则,导致编译不通过:
While 条件 ... Wend:是旧版的循环语法,开头不需要加Do,结尾用Wend闭合Do While 条件 ... Loop:是更通用的Do循环语法,开头带Do,结尾必须用Loop闭合
你当前的代码以Do While开头,却用Wend做闭合,编译器无法找到和Wend匹配的独立While开头语句,因此抛出「Wend without While」的错误。
修复方案
两种修改方式二选一即可:
方案1:保留Wend,删除开头的Do
Option Compare Database Function Impo_allExcel() Dim myfile As String Dim mypath As String mypath = "C:\Users\bbnewman\Desktop\Temp\temp\" myfile = Dir(mypath & "*.xlsx") ' 直接指定过滤规则,省去后续判断 While myfile <> "" DoCmd.TransferSpreadsheet acImport, 10, "LCRHistory", mypath & myfile myfile = Dir() Wend End Function
方案2:保留Do While,把结尾的Wend改为Loop
Option Compare Database Function Impo_allExcel() Dim myfile As String Dim mypath As String mypath = "C:\Users\bbnewman\Desktop\Temp\temp\" myfile = Dir(mypath & "*.xlsx") ' 直接指定过滤规则,省去后续判断 Do While myfile <> "" DoCmd.TransferSpreadsheet acImport, 10, "LCRHistory", mypath & myfile myfile = Dir() Loop End Function
额外优化说明
- 原代码里的
ChDir语句可以删除,你在导入时已经拼接了完整的文件路径,不需要额外切换工作目录 - 给变量声明指定类型(
As String)可以避免后续隐式类型转换带来的异常 - 直接在
Dir参数中指定*.xlsx过滤条件,不需要额外加If判断文件名后缀,代码更简洁
内容的提问来源于stack exchange,提问作者Brent Newman
相关产品推荐
相关产品推荐

