【发布时间】:2015-05-05 20:01:45
【问题描述】:
当我尝试将值从一个工作簿导入到另一个工作簿时,出现应用程序或对象定义错误。我已经能够通过显式激活工作簿并在引用每个工作簿的范围之前选择工作表来解决它,但如果可能的话,我想避免这种情况。此时代码中的两个工作簿都是打开的。有什么想法吗?
这会给我带来错误:
Dim wbImport As Workbook
Dim wbReceive As Workbook
Const sExcept = "Sheet2 Name"
Const sSht = "Sheet1 Name"
Dim rExceptions As Range
wbReceive.Sheets(sExcept).Rows(1).Insert shift:=xlDown
Set rExceptions = wbImport.Sheets(sSht).Range(Cells(rCell.Row, iHeadCol), Cells(rCell.Row, iLastCol))
wbReceive.Sheets(sExcept).Range(Cells(1, iHeadCol), Cells(1, iLastCol)).Value = rExceptions.Value 'error occurs here
这运行良好,但我想避免使用 .Select 和 .Activate
wbReceive.Sheets(sExcept).Rows(1).Insert shift:=xlDown
wbImport.Activate
wbImport.Sheets(sSht).Select
Set rExceptions = wbImport.Sheets(sSht).Range(Cells(rCell.Row, iHeadCol), Cells(rCell.Row, iLastCol))
wbReceive.Activate
wbReceive.Sheets(sExcept).Select
wbReceive.Sheets(sExcept).Range(Cells(1, iHeadCol), Cells(1, iLastCol)).Value = rExceptions.Value
当我调试时,看起来wbReceive.Sheets(sExcept) 行中引用的单元格实际上引用了wbReceive 工作簿中的不同工作表。不知道为什么会这样,因为 wb 和 sheet 已被明确引用?
【问题讨论】:
-
@DavidZemens OP 清楚地明白了这一点——他只是对在这个例子中他做错了什么感到困惑。
-
我确实审查了这个问题,但仍然没有看到问题所在。感谢@TimWilliams 的完美解释和修复。