VBA如何修改wsSrc定义 固定首次激活的源工作表引用
问题原因
你当前的wsSrc属性每次被调用时,都会实时读取当前的活动工作表,程序执行跨表跳转、复制粘贴操作后,活动工作表已经切换为目标表,此时再调用wsSrc就会错误返回目标表引用,和你预期的初始源表不一致。
修改方案
利用模块级私有变量缓存初始源表引用,仅在第一次调用wsSrc时捕获当时的活动工作表(也就是主流程启动前你选中的源表),后续不管活动表怎么切换,都直接返回缓存好的固定引用,完全匹配你「主Sub运行前完成源表定义」的要求。
- 首先在存放属性过程的模块顶部,声明模块私有变量用于缓存引用:
' 模块级缓存变量,仅当前模块内可访问 Private m_wsSrc As Worksheet
- 替换原有
wsSrc属性的代码:
Property Get wsSrc() As Worksheet ' 首次调用时初始化源表引用,后续调用直接返回缓存值 If m_wsSrc Is Nothing Then Set m_wsSrc = ActiveWorkbook.ActiveSheet End If Set wsSrc = m_wsSrc End Property
可选扩展
如果后续有切换新源表的需求,可以加一个重置缓存的方法,调用后下次读取wsSrc就会重新捕获当前活动表作为新源表:
Public Sub ResetWsSrc() Set m_wsSrc = Nothing End Sub
额外说明
你现在wsDest的写法是正确的,直接绑定固定工作簿下的固定工作表,不受活动表切换影响。跨表操作时尽量直接用预先定义好的工作表对象操作,不要靠Activate、Select切换活动表传递引用,稳定性和执行效率都会更高。
内容的提问来源于stack exchange,提问作者b_dawg
相关产品推荐
相关产品推荐

