【问题标题】:Can't activate specific worksheet but I can activate others :S无法激活特定工作表,但我可以激活其他工作表:S
【发布时间】:2015-08-19 03:44:57
【问题描述】:

在这里遇到了一些困难.. 对编码和 VBA 很陌生,使用 2013 编写了一个代码,却没有意识到我在向后运行 2010 版本时会遇到问题... Derp..

我遇到了一个奇怪的问题。

我正在使用 worksheets("...").Activate 在工作表之间移动(这样做是为了在我的代码的每一行之前减少 "worksheets("...")." 的数量)。

无论如何,宏激活除一张之外的所有工作表都没有问题。有问题的工作表是原始按钮运行代码的位置。我似乎也无法使用 activex 命令按钮(这可能是我的问题的根源)。

注意:我已经尝试过由 Windows 更新引起的“删除 x 文件”——这不是问题的根源,我仍然可以添加新的 activex 控件等

编辑:我通过从 ActiveX 控件更改为调用调用用户窗体的宏的按钮解决了这个问题。似乎与该工作表上的 ActiveX 控件有关,阻止了它通过模块激活。有人对此有解释吗?

【问题讨论】:

  • 确保您有一个实际名为“...”的工作表 - 验证前导/尾随空格。
  • 是的,我应该指定的。该宏在 2013 年完美运行,我已经三次检查了“...”部分,它是 101% 正确的哈哈
  • 我似乎已经通过复制工作表并重命名它来工作......超级奇怪

标签: vba excel excel-2010 excel-2013


【解决方案1】:

对于您无法激活工作表的原因,我没有任何答案,并且认为我无法在没有看到相关工作簿的情况下回答它。但是,我可以帮助您避免首先使用 activate ;)

根据您的描述,听起来您正在使用Worksheet(index).Activate,因此您可以使用ActiveSheet.SomeMember 来处理工作表对象。

如果是这样,您可以通过使用with block 来节省自己的时间并使您的程序更有效率。

例如:

With Worksheets("...")
    Debug.Print "working with """ & .Name & """."
    Debug.Print "which belongs to """ & .Parent.Name &  """."
End With

如果您需要在多个地方引用它,我建议将对象分配给一个变量。

例如:

Dim MySheet as Worksheet 
Set MySheet = Worksheets("...")

With MySheet
    'Do something 
End With

MySheet.range("A:A").Copy Destination:= WorkSheets("Someothersheet").Range("B:B")

【讨论】:

  • 我一直在使用 .activate,这样我就可以使用“something = cells(x,y)....”,而我所有的 subs 大约有 6000 行,我不认为我会费心改变,但我仍然只是学习编码。肯定会将此纳入我的下一个项目!谢谢:)
  • 如果你的潜艇变得那么长,你应该把他们正在做的工作“分块”成单独的函数/潜艇。这将使您的代码在未来更易于阅读和维护/修改。
  • 谢谢,我有哈哈。大约进行到一半时,我收到了一个错误,因为我的子太长了哈哈。它现在有很多部分,更整洁,更容易使用。不过为建议喝彩:)
猜你喜欢
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多