我正在尝试在公式栏中创建自定义右键单击菜单(当您在单元格内部时右键单击时出现的那个菜单,例如键入)。我已经设法在我的右键单击中获取了我想要的按钮,但我找不到如何确定光标在单元格内的位置。
例如,如果光标位于单元格中的第5个字符之后,如何在BeforeRightClick事件发生之前或期间确定?我发现的唯一问题是相反的问题;使用SendKeys:
将光标放在单元格的特定部分'===================================================================================
'- MOVE CURSOR IN THE FORMULA BAR AS REQUIRED
'- Brian Baulsom September 2007
'===================================================================================
Sub test()
Dim c As Integer
c = 3
'------------------------------------------------------------------------------
Range("A1").Select ' select cell
SendKeys "{F2}", True ' activate formula bar. cursor is to right of contents.
DoEvents
'------------------------------------------------------------------------------
'- move cursor 3 characters to the left in the formula bar
'- or in the cell if Tools/Options/Edit .. "Edit directly in cell" is checked
SendKeys "{LEFT " & CStr(c) & "}", True ' ="{LEFT 3}"
DoEvents
End Sub
'-----------------------------------------------------------------------------------
source: http://www.mrexcel.com/forum/excel-questions/282172-setting-cursor-position-cell-text-using-visual-basic-applications.html
最终目标是在键入单元格时插入一些标准子字符串。例如,我想在单元格中键入时右键单击[hi this is standard string X-XXX-XXXX]
。
编辑:
我尝试使用sendkeys直接发送我的字符串,但我只是从Excel中获得“ping”声音,表明它不可能。这就是我的尝试:
With fbar.Controls.add(Temporary:=True, Type:=msoControlButton, Before:=1)
.BeginGroup = False
.FaceId = 267
.Caption = wsLabels.GetLabel("rcRefMoM")
.OnAction = "'" & ThisWorkbook.Name & "'!'rcAddRef2 '"
End With
Function rcAddRef2()
SendKeys (" [Ref:X \NAME]")
End Function
编辑2:实际上它根本没有输入我的rcAddRef2功能,它只是直接ping,因为我处于编辑模式。如果我把它放在那里,它不会激活断点。所以Sendkeys可能不是问题,就像让函数运行一样。
如果我尝试它,它在Cell命令栏中工作正常,所以我有点不知所措:
'This runs
With cbar.Controls.add(Temporary:=True, Type:=msoControlButton, Before:=1)
.BeginGroup = False
.FaceId = 267
.Caption = wsLabels.GetLabel("rcRefMoM")
.OnAction = "'" & ThisWorkbook.Name & "'!'rcAddRef2 '"
End With
答案 0 :(得分:1)
一旦您处于单元格编辑模式,您就不会在VBA中触发事件。虽然可能有一些更深入的Windows DLL代码可以插入,但更好的选择是将UserForm与TextBox对象一起使用:
https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.controls.textbox.aspx
具体来说,您想拦截TextChanged事件:
https://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged.aspx
在该对象上触发了几十个事件,包括KeyDown,KeyPress和KeyUp,因此我确信您可以找到最适合您的场景的任何事件。