为什么我的宏只能在宏对话框中运行时才能工作?

时间:2015-11-12 23:06:07

标签: vba ms-word word-vba

按下按钮时,我想要工作两个宏。我插入了按钮sub中所需的代码,并使其不是私有的。然后我打开宏对话框并运行宏,它按预期工作。但是,当我尝试按下按钮时,会出现一个错误,表示"所请求的集合成员不存在。"

在这种情况下,代码不应该真正重要,因为它在我手动运行时工作正常但是在这里:

Sub CommandButton4_Click()
  Selection.Tables(1).Select
  Selection.Copy
  Selection.PasteAndFormat (wdPasteDefault)
  ActiveWindow.ActivePane.VerticalPercentScrolled = 24

  'Some other Code here

End Sub

当我执行调试时,它表示问题出在这一行:Selection.Tables(1).Select

然后在我的另一个例子中,我有这个代码:

Sub CommandButton3_Click()
  Selection.SelectRow
  Selection.Copy
  Selection.InsertRowsBelow 1
  Selection.Paste
End Sub

代码错误似乎在这一行:

Selection.SelectRow

它说

  

SelectRow方法或属性不可用,因为部分或全部对象未引用表。

我使用Macro Recorder获取了代码。

如果您对发生这种情况的原因有任何想法,我将非常感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

此代码

Selection.Tables(1)

仅在Selection(光标)位于表格内时才有效。

单击按钮时,按钮将获得焦点,并在此处移动“选择”。如果按钮不在表格内,则代码将失败。

如果你在桌子内移动按钮,它确实有效,但这可能看起来很傻。

答案 1 :(得分:0)

替换

 Selection.SelectRow

 'r being which ever row you want to Select
 Selection.Table(1).Row(r).Select

答案 2 :(得分:0)

您可以将宏绑定到组合键。这不会改变你设定的任何焦点,因此应该解决你的问题。

如何做到这一点在不同版本的Word中有所不同,但最近的版本在这里解释:

http://wordribbon.tips.net/T008058_Assigning_a_Macro_to_a_Shortcut_Key.html