VBA代码异常:仅读取H10单元格值作为文件名,而非活动行H列值
问题分析与解决方案
一、总是读取H10单元格的原因
你的代码逻辑顺序有误:在执行Workbooks.Add("filepath")创建新工作簿后,活动窗口会自动切换到新工作簿,此时ActiveCell.row获取的是新模板工作簿里的活动行,而非你最初选中的源工作簿的行。这就是为什么无论之前选哪一行,最终都读取H10——因为你的模板文件打开后,默认活动单元格在第10行。
二、修复后的代码(解决读取错误+自动处理文件已存在)
调整代码执行顺序,先获取源工作簿的活动行号,再创建新工作簿;同时添加自动处理文件已存在的逻辑:
Sub CREATE_REINTSTATEMENT_SHEET() Dim wb As Workbook, wb2 As Workbook Dim Loc As String Dim fPath As String Dim row As Integer ' 先获取源工作簿的活动行号(关键:必须在创建新工作簿前执行) Set wb = ActiveWorkbook row = ActiveCell.row Loc = wb.Worksheets("Sheet1").Cells(row, 8).Value ' 加.Value取值更严谨 ' 再创建新工作簿 Set wb2 = Workbooks.Add("filepath") fPath = "myfilepath\" ' 自动处理文件已存在:关闭保存警告,直接覆盖原有文件 Application.DisplayAlerts = False wb2.SaveAs Filename:=fPath & Loc & ".xlsm", FileFormat:=52 Application.DisplayAlerts = True ' 恢复系统默认的警告提示 End Sub
额外说明
Cells(row,8)里的8确实代表H列(第8列),你的理解是对的,问题核心是活动单元格的切换时机。- 如果不想直接覆盖文件,也可以先判断文件是否存在再做提示:
If Dir(fPath & Loc & ".xlsm") <> "" Then MsgBox "文件已存在,请修改文件名或删除原有文件。", vbExclamation Exit Sub End If
内容的提问来源于stack exchange,提问作者Liv Hudson
相关产品推荐
相关产品推荐

