【发布时间】:2016-08-27 02:53:19
【问题描述】:
我有一段非常简单的 VBA 代码来复制单元格的值,打开另一个工作簿,然后将该单元格的值粘贴到新打开的工作簿中。它在普通模块中完美运行。但是当我运行ThisWorkbook模块中的代码时,为了在保存文件时触发它,另一个工作簿将不会打开。然而,像打开 MsgBox 这样更简单的宏在 ThisWorkbook 中可以正常工作。另一个奇怪的事情是,如果我正在查看代码,代码确实可以在 ThisWorkbook 中工作。有谁知道为什么会发生这种情况?我正在运行 Excel 2010。
代码如下:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim rangetocopy As String
Dim w1 As Workbook
Dim w2 As Workbook
Set w1 = ActiveWorkbook
Calculate
rangetocopy = w1.Sheets("Reference Data").Range("F10").Value
Set w2 = Workbooks.Open("C:\Users\user1\Documents\To-Do.xlsm")
w2.Worksheets("Masterlist").Activate
Range("A1").Select
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.Value = rangetocopy
w1.Worksheets("To-do List").Activate
End Sub
有什么想法吗?
【问题讨论】:
-
事件触发时从模块调用子程序。
-
如果您在
Set w1 = ActiveWorkbook行上放置一个断点 (F9),然后按 Ctrl+S... 是否会触发断点? FWIW 与Select和Activate合作远非理想;考虑找出其他方法来做你的事情。 -
Set w1 = ActiveWorkbook应该是Set w1 = ThisWorkbook在工作簿未打开时您是否看到任何错误? -
如果工作簿无法打开,那么应该会引发错误:代码不应该在下一行失败。也许工作簿确实打开了但您没有看到它(它是隐藏的吗?) - 它是否出现在 VB 编辑器的项目树中?顺便说一句,如果您在评论中包含@timwilliams,我会收到通知...
-
我无法解释:如果工作簿打开,那么它应该在树中 - 如果它没有打开,那么应该会引发错误。尝试在
Open行之后直接添加MsgBox w2.Sheets.Count:它运行时你会看到什么?
标签: vba excel excel-2010