【问题标题】:Prevent excel from activating new objects (Sheets, Charts, Workbooks)防止 excel 激活新对象(表格、图表、工作簿)
【发布时间】:2014-07-07 18:37:40
【问题描述】:

好的,我有一个处理大量数据并制作大量图表的 Excel 宏。我从一个最近退休的人那里继承了代码,而代码的功能非常低效,所以我正在重写它。我要解决的一件事是他激活/选择了所有内容。我更喜欢使用引用,从不选择/激活任何东西。

但是我遇到了一个问题,当我创建一个新的工作簿或图表时,它会从原始工作簿中窃取焦点。这很烦人,因为我通常不会在我的主工作簿的引用中添加工作簿对象。

例如,当我使用这些线条时,新的图表/工作簿会变为活动状态

Set wb = Workbooks.AddSet wC = wb.Charts.Add

然后我使用Workbooks(FileName).Activate 重新激活原始工作簿

我觉得每次都必须这样做很烦人,并且想知道是否有办法阻止新对象变得活跃。

编辑:我刚刚意识到其他操作会导致图表窃取焦点,例如使用此命令移动图表wC.Move After:=wb.Worksheets(wb.Worksheets.Count)

【问题讨论】:

  • 当你使用 .Add 时不要认为它是可能的。您可以使用 Thisworkbook.Activate 激活您的原始工作表
  • 如果您不想看到这些开关,请使用Application.ScreenUpdating=False 但是您无法阻止其他对象被激活。
  • 我总是使用Application.ScreenUpdating=False,但是当我尝试使用Sheets(1).Cells(3,2)=X 之类的东西时,我在其他地方遇到了问题,它会出现在错误的工作簿中并出现错误。我一直在到处添加Thisworkbook.Activate,但我希望有办法从一开始就避免这个问题。
  • 比在任何地方重新激活工作簿更好的是完全限定所有引用以包含工作簿对象。这只是在处理多个工作簿时避免错误的最佳方法。

标签: excel charts vba


【解决方案1】:

如果您在新工作表之后声明旧工作表,我相信这可以实现您想要的。例如,

Dim newWst As Worksheet
Dim oldWsk As Worksheet

Set newWst = Worksheets.Add
Set oldWst = Worksheets("Sheet1")

Cells(1, 1) = "Test"

为我工作。它在旧工作表中添加了“测试”。

【讨论】:

  • 这是一个有趣的解决方法,不确定它是否比使用 Thisworkbook.activate 更好,但它是一种替代方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多