获取游标在单元格中的位置
我正在尝试在公式栏中创建一个自定义右键单击菜单(右键单击时出现的单元格,例如键入内容)。我设法通过右键单击我想要的按钮,但是我找不到如何确定光标位于单元格内的位置。获取游标在单元格中的位置
例如,如果光标位于单元格中的第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功能,它只是坪直线距离,因为我在编辑模式。如果我在那里放一个,它不会激活一个断点。所以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
一旦你在单元格编辑模式是你没有事件被解雇进入VBA。虽然可能有一些更深的Windows DLL的代码可以插入,更好的选择是使用用户窗体有一个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,所以我相信你可以找到适合你的场景的最好的东西。
我只是想到了一些东西......我可以直接使用SendKeys键入我想要的文本而不会检查光标位置吗?这被认为是一个强有力的方法?编辑:没有工作 –
是我的看法还是你试图模仿[autocorrect行为](http://www.techonthenet.com/excel/questions/auto_correct2010.php)莫名其妙? – Sgdva
我不会认为'SendKeys'是一种可靠的方法。试想一下,当你在运行宏时,有人正在打字。如果在用户输入时需要更多控制,为什么不使用带有文本框的自定义窗体?有各种各样的事件,包括'DoubleClick'和'MouseDown'以将预定义文本添加到文本框的当前值。 – Ralph