【问题标题】:How do I reopen an Excel workbook while executing a VBA Macro it contains?如何在执行 Excel 工作簿包含的 VBA 宏时重新打开它?
【发布时间】:2011-08-17 12:26:17
【问题描述】:

我在我的 excel 文件上做了各种各样的事情,最后我需要回到上次保存的版本。所以我关闭并重新打开我的excel文件而不保存,这很有效。在关闭工作簿之前,我复制了一系列单元格(通过使用一些排序和过滤等创建),现在我需要在重新打开文件时将它们粘贴到文件末尾。

但是当我们重新打开一个工作簿时,之前运行的宏不会从它停止的地方继续。我想在它再次重新打开时停止的地方运行宏。这可能吗?

我的想法是在工作簿打开时放置此代码:

     sub Auto_open()
     sheet1.activate
     ' and select the last row of the sheet1
     activesheet.paste
     end sub

因为当工作簿重新打开时,它会自动执行此子例程并复制单元格内容。但缺点是我们不能说它的单元格总是被复制不足,因为如果用户将一些数据复制到剪贴板,然后由于 Auto_open 子打开这个文件,它会将该数据复制到工作表的末尾,但这不是什么我想。

谁能提出一个解决这个问题的好主意?

【问题讨论】:

  • 你能有宏在不同的工作簿中完成所有这些吗? IE。工作簿 A 包含一个关闭和重新打开工作簿 B(包含您的所有数据)的宏?

标签: vba excel excel-2007


【解决方案1】:

您为什么不暂时.SaveAs 您修改后的工作簿使用不同的文件名?然后,您可以将其保持打开状态,重新打开原始工作簿,然后在两个工作簿打开的情况下进行复制。最后,如果您愿意,请删除修改后的工作簿。

这个使用_Open事件的企业只是要求灾难发生。

另外,.Copy 是一种极易出错的方法,因为它使用剪贴板,其他应用程序也可以访问该剪贴板,而且两端的结果都无法预料。我从不单独使用.Copy,但有时使用安全的.Copy Destination:=...。但大多数情况下,我会这样做:

wbkTwo.Sheets("Sheet1").Range("A1:B5") = _
    wbkOne.Sheets("Sheet1").Range("A1:B5")

【讨论】:

    猜你喜欢
    • 2018-11-06
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2015-11-30
    相关资源
    最近更新 更多