我已经看过关于这个问题的每一篇文章/问题,但是没有运气--提前感谢你的帮助:
在我的“工作手册”中,我有以下内容:
Option Explicit
Public Sub Workbook_Open()
Application.OnKey "+^%{+}", "Insert_Columns"
End Sub
在模块中,我有以下内容:
Sub Insert_Columns()
Dim num As String
num = InputBox("How many columns do you want to insert?")
If num <> "" Then
If num > 0 Then ActiveCell.Offset(0, 1).Resize(1, num).EntireColumn.Insert
End If
End Sub
由于某种原因,捷径不起作用。我试过很多不同的方法,但是有没有人知道为什么这条捷径是行不通的?如果我手动单击"Run“,该宏将运行得很好。
谢谢!
发布于 2020-11-28 18:54:51
first 的所有您不需要的第一个+
,您可以简单地拥有"^%{+}"
。
要访问Ctrl
+Alt
+Shift
+=
字符,需要按下Shift
键(在大多数标准键盘中,+
位于=
按钮上),这意味着您需要按下Shift
才能运行该过程。如果不想按Shift
键,请使用"^%{=}"
撇开:
您可能希望将这些OnKey
设置放在Workbook_Activate
中,并在Workbook_Deactivate
中重置它们。这将避免在工作簿关闭或它不是活动的工作簿时运行这些过程。请注意,我是如何完全限定过程名称的,以避免与另一个在不同的打开工作簿中具有相同名称的过程发生冲突。
Private Sub Workbook_Activate()
'* Set OnKey shortcuts
Application.OnKey Key:="^%{=}", Procedure:=ThisWorkbook.Name & "!Insert_Columns"
End Sub
Private Sub Workbook_Deactivate()
'* Reset OnKey shortcuts
Application.OnKey Key:="^%{=}", Procedure:=""
End Sub
最后要考虑的是使用Application.InputBox
而不是InputBox
,因为前者可以让您更好地控制用户输入的内容。找到docs 这里。
Sub Insert_Columns()
Dim num As String
'* Type:=1 -> Number
num = Application.InputBox("How many columns do you want to insert?", Type:=1)
'* Application.InputBox returns False if x or Cancel buttons are pressed
If num Then
If num > 0 Then ActiveCell.Offset(0, 1).Resize(1, num).EntireColumn.Insert
End If
End Sub
发布于 2020-11-28 09:13:17
嗯,我已经测试过您的代码并运行了,但是您可能尝试使用Ctrl + Alt + Shif + {+}
,但是您正在按{NUMPAD+} remenber {+}和{NUMPAD+}键,当我按下{+}代码运行良好时,这些键是不同的。
https://stackoverflow.com/questions/65047703
复制相似问题