2016-08-22 72 views
5

我正在嘗試在公式欄中創建一個自定義右鍵單擊菜單(右鍵單擊時出現的單元格,例如鍵入內容)。我設法通過右鍵單擊我想要的按鈕,但是我找不到如何確定光標位於單元格內的位置。獲取遊標在單元格中的位置

例如,如果光標位於單元格中的第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 
+0

我只是想到了一些東西......我可以直接使用SendKeys鍵入我想要的文本而不會檢查光標位置嗎?這被認爲是一個強有力的方法?編輯:沒有工作 –

+0

是我的看法還是你試圖模仿[autocorrect行爲](http://www.techonthenet.com/excel/questions/auto_correct2010.php)莫名其妙? – Sgdva

+5

我不會認爲'SendKeys'是一種可靠的方法。試想一下,當你在運行宏時,有人正在打字。如果在用戶輸入時需要更多控制,爲什麼不使用帶有文本框的自定義窗體?有各種各樣的事件,包括'DoubleClick'和'MouseDown'以將預定義文本添加到文本框的當前值。 – Ralph

回答

1

一旦你在單元格編輯模式是你沒有事件被解僱進入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,所以我相信你可以找到適合你的場景的最好的東西。

相關問題