मैं एक्सेल शीट पर काम कर रहा हूं जिसमें प्रत्येक पंक्ति को अंतिम बार इंगित करने की आवश्यकता है कि उस पंक्ति के भीतर कोई भी सेल बदल गया है। सरलतम विधि मैं यह कर पाया है तो जैसे, वर्कशीट कोड में VBA के कुछ छोटी राशि डाल करने के लिए है:एक्सेल वीबीए: SendKeys कुछ कंप्यूटरों पर विफल रहता है
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If (Target.Row > 2) And (Cells(Target.Row, "A") <> "") Then
Cells(Target.Row, "N").Value = Date
End If
Application.EnableEvents = True
End Sub
यह प्रभावी रूप से "एन" कॉलम में तारीख बदल जाएगा जब भी में किसी भी अन्य आइटम वह पंक्ति संपादित की गई है। महान! हल, छोड़कर ...
क्योंकि मैं कोड में सेल मान बदल रहा हूं, पूर्ववत स्टैक तुरंत खो गया है, और निश्चित रूप से इसका मतलब है कि इस वर्कशीट में कोई भी काम पूर्ववत नहीं किया जा सकता है।
तो, इसका एक विकल्प यह सोचने में उत्कृष्टता है कि मैंने सेल संपादित नहीं किया है। तारीख बदलने में इस कोड को पूर्ववत ढेर को बरकरार रखता है:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cursorLocation As Range
Application.EnableEvents = False
If Target.Row > 2 And Cells(Target.Row, "A") <> "" Then
Set cursorLocation = ActiveCell
Cells(Target.Row, "N").Select
SendKeys "^;~", True
cursorLocation.Select
End If
Application.EnableEvents = True
End Sub
इस मामले में, हम सेल, नकली संपादन करने के लिए उपयोग SendKeys सेल का चयन करें, और उसके मूल स्थान पर कर्सर को बहाल। "^; ~" एक्सेल के "Ctrl +;" का उपयोग कर रहा है तिथि इनपुट करने के लिए शॉर्टकट। महान! हल, छोड़कर ...
यह कोड मेरी मशीन (विन 7, एक्सेल 2010) पर ठीक काम करता है लेकिन सह-कार्यकर्ता की मशीन (Win8, Excel 2010, शायद थोड़ा तेज़) पर विफल रहता है। Win8 मशीन पर (कोई विचार नहीं है कि यह समस्या है, बीटीडब्ल्यू), क्या होता है कि जब भी कोई सेल बदल जाता है, तो उस सेल के नीचे तुरंत हर सेल वर्तमान तारीख बन जाता है, और निश्चित रूप से पूर्ववत इतिहास को संरक्षित करना अर्थहीन है क्योंकि निष्पादन एक पूर्ववत तुरंत वर्कशीट कोड को पुनः सक्रिय करता है और सबकुछ फिर से तिथियों में बदल देता है।
मुझे पता चला कि मेरी मशीन पर वही बात होगी यदि मैं SendKeys कमांड में निहित "प्रतीक्षा" को हटा देता हूं। यही कारण है, अगर मैं लाइन का उपयोग करें:
SendKeys "^;~", False
तो, मेरा अनुमान है कि यह है कि जो भी कारण के लिए, तब भी जब एक्सेल का एक ही संस्करण का उपयोग कर, अपने कंप्यूटर SendKeys के लिए समाप्त करने के लिए आदेश इंतज़ार कर रहा है है, लेकिन मेरे सहकर्मी का कंप्यूटर नहीं है। कोई विचार?
किसी के लाभ के लिए और ने इस कोशिश कर रहा है, मैं बदल मेरी "अगर" आप मैन्युअल रूप से तिथि वापस बदलने के लिए अनुमति देने के लिए: 'अगर Target.Row> 2 और कोशिकाओं (Target.Row, 'ए') <> "" और लक्ष्य। कॉलम <> 14' –