Excel VBA打开txt文件后关闭时报运行时错误9求助
错误原因
运行时错误9即「下标越界」,你代码中报错的核心原因是:
FName存储的是文本文件的完整路径(例如D:\项目\地质编码.txt),但Workbooks集合的索引仅支持工作簿的不含路径的纯文件名,用完整路径检索Workbooks自然找不到对应对象,触发下标越界。- 额外隐患:你没有处理用户在文件选择窗口点「取消」的场景,此时
FName会返回布尔值False,后续代码也会报错。
修复方案
最佳实践是打开文本文件时直接将其赋值给Workbook对象,不需要靠文件名检索,完全规避索引错误,修正后的代码如下:
Sub ImportBGSGeol() ' ' ImportBGSGeol Macro ' Import a text file of geology codes from BGS geoindex and process ' ' Define variables Dim wkb As Workbook Dim ws As Worksheet Dim FName As Variant ' 改为Variant类型,兼容用户点取消返回的False值 Dim wbTxt As Workbook ' 新增变量存储打开的文本文件工作簿 Application.Calculation = xlAutomatic ' Assign variable to workbook and worksheet Set wkb = ThisWorkbook wkb.Worksheets.Add().Name = "Summary Table" Set ws = wkb.Worksheets("Summary Table") ' 直接绑定工作表,避免ActiveSheet漂移 'Open text file and copy data FName = Application.GetOpenFilename(Title:="Please choose BGS text file downloaded from Geoindex to open", _ FileFilter:="Text Files *.txt* (*.txt*),") ' 处理用户取消选择文件的场景 If FName = False Then Exit Sub Workbooks.OpenText Filename:= _ FName _ , Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _ Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _ Array(2, 1)), TrailingMinusNumbers:=True ' 绑定刚打开的文本文件工作簿 Set wbTxt = ActiveWorkbook wbTxt.ActiveSheet.Range("A1").CurrentRegion.Copy 'Paste data to Summary Table and format ws.Range("A1").PasteSpecial ' 直接用对象关闭,不需要检索Workbooks集合,完全规避下标越界 wbTxt.Close SaveChanges:=False ws.Activate Columns("A:A").EntireColumn.AutoFit wkb.Save End Sub
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

