2016-08-22 10 views
5

मैं सूत्र बार में एक कस्टम राइट क्लिक मेनू बनाने की कोशिश कर रहा हूं (जो एक सेल के अंदर सही क्लिक करते समय दिखाई देता है, उदाहरण के लिए टाइपिंग)। मैंने अपने दाएं क्लिक में इच्छित बटन प्राप्त करने में कामयाब रहा है, लेकिन मुझे यह नहीं पता कि सेल के अंदर कर्सर कहां स्थित है।एक सेल में कर्सर की स्थिति प्राप्त करें

उदाहरण के लिए, यदि कर्सर सेल में 5 वें चरित्र के बाद है, तो मैं यह कैसे निर्धारित कर सकता हूं कि पहले या इससे पहले के पहले क्लिक करेंक्लिक घटना होती है? मुझे मिली एकमात्र चीज विपरीत समस्या थी; सेल के एक विशिष्ट भाग में कर्सर रखकर, 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 का उपयोग कर की कोशिश की मेरी स्ट्रिंग सीधे भेजने के लिए है, लेकिन मैं सिर्फ यह दर्शाता है कि यह संभव नहीं है एक्सेल से एक "पिंग" ध्वनि मिलता है।

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 समस्या नहीं हो सकती है, जितना कार्य चलाने के लिए।

यह सेल आदेश पट्टी में बारीक थोड़ा काम करता है अगर मैं इसे करने की कोशिश, तो मैं कर रहा हूँ एक नुकसान में:

'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' को एक मजबूत दृष्टिकोण पर विचार नहीं करता। बस मैक्रो चल रहा है, जबकि किसी को लिखने की कल्पना करो। यदि आपको अधिक नियंत्रण की आवश्यकता है क्योंकि उपयोगकर्ता टाइप कर रहा है तो टेक्स्टबॉक्स के साथ कस्टम फॉर्म का उपयोग क्यों न करें? टेक्स्टबॉक्स के वर्तमान मूल्य में पूर्वनिर्धारित पाठ जोड़ने के लिए 'डबलक्लिक' और 'माउसडाउन' समेत सभी प्रकार की घटनाएं हैं। – Ralph

उत्तर

1

एक बार जब आप सेल संपादन मोड में कर रहे हैं आप है घटनाओं निकाले जाने नहीं है वीबीए में हालांकि, कुछ गहरी विंडोज dll कोड आप सम्मिलित कर सकता है हो सकता है, एक बेहतर विकल्प के लिए एक पाठ बॉक्स वस्तु के साथ एक UserForm उपयोग करने के लिए होगा:

:

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, कुंजी दबाने सहित होते हैं, और KeyUp तो मुझे यकीन है कि आप पा सकते हैं जो कुछ भी अपने परिदृश्य के लिए सबसे अच्छा है कर रहा हूँ।

संबंधित मुद्दे