VBA如何自动指定固定路径文件执行后续代码,现有代码报错如何修正?
代码问题排查与修正
存在的核心问题
- 定义了存储目标文件路径的
Path变量但未实际使用,没有调用Workbooks.Open()方法打开固定路径下的c.xlsx文件,错误的将xAddWb赋值为当前激活的工作簿,导致后续读取数据的来源完全错误。 - 引用
Worksheets("Results")时未指定所属工作簿,VBA默认会读取当前激活工作簿的对应工作表,很容易出现工作表不存在的运行时错误。 - 初始赋值
xWb为ActiveWorkbook逻辑有风险,Auto_Open是当前存放代码的工作簿打开时触发的事件,直接用ThisWorkbook指代代码所在的工作簿更稳定,不会受当前激活窗口影响。
修正后的可用代码
Sub Auto_Open() Dim xWb As Workbook Dim xAddWb As Workbook Dim xRng1 As Range Dim xRng2 As Range Dim Path As String ' 用ThisWorkbook指代当前存放VBA代码的工作簿,更稳定 Set xWb = ThisWorkbook Path = "C:\Users\x\x\xx\c.xlsx" ' 打开固定路径下的目标文件,赋值给xAddWb Set xAddWb = Workbooks.Open(Path) ' 明确指定从xAddWb的Results工作表取数据 Set xRng1 = xAddWb.Worksheets("Results").UsedRange ' 明确指定粘贴到xWb的第一个工作表A1位置,也可替换为指定工作表名,如xWb.Worksheets("目标表").Range("A1") Set xRng2 = xWb.Worksheets(1).Range("A1") xRng1.Copy xRng2 xRng2.CurrentRegion.EntireColumn.AutoFit ' 关闭读取的源文件不保存 xAddWb.Close False End Sub
补充注意点
- 请确认你填写的固定路径确实存在对应的c.xlsx文件,且该文件内确实有名为
Results的工作表,否则会触发运行时错误。 - 如果要指定粘贴到代码所在工作簿的特定工作表,可以把
xWb.Worksheets(1)里的1换成你要的工作表名称即可。
内容的提问来源于stack exchange,提问作者Rupesh Ghosh
相关产品推荐
相关产品推荐

