2012-08-13 23 views
9

मुझे यह पता लगाने की ज़रूरत है कि स्क्रीन पर कोई सेल दिखाई दे रहा है या नहीं।यह निर्धारित करने के लिए कि वर्कशीट सेल VBA में दृश्यमान/प्रदर्शित किया गया है या नहीं?

दृश्यमान से, मेरा मतलब छुपा नहीं है। मैं विशेष रूप से यह पता लगाने की कोशिश कर रहा हूं कि एक सेल वर्तमान में सक्रिय शीट में प्रदर्शित होता है, या यदि यह प्रदर्शित नहीं होता है, यानी: इसे सक्रिय सक्रिय शीट से स्क्रॉल किया गया है।

मैं ऑनलाइन देखा है, और केवल निम्न कोड है जो मेरे लिए काम नहीं लगता है पा सकते हैं:

Private Sub CommandButton1_Click() 
    With Worksheets(1).Cells(10, 10) 
     'MsgBox "Value: " & .Value & ", Top: " & .Top & ", Left: " & .Left 
     Dim visibleCells As Range 
     Set visibleCells = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible) 
     If Intersect(Worksheets(1).Cells(10, 10), visibleCells) Is Nothing Then 
      MsgBox "This cell is not visible." 
     End If 
    End With 
End Sub 

आपकी मदद के लिए अग्रिम धन्यवाद,

मरवन

+0

बस जिज्ञासु ... क्या होगा अगर कहते हैं कि सेल ए 4 छिपा हुआ है और आप कहते हैं कि पंक्तियों 41. आप सेल ए 4 दृश्य या छिपा पर विचार करेंगे तक देख सकता है? इसके अलावा आप उन कोशिकाओं के लिए क्या कहेंगे जो आंशिक रूप से दिखाई दे रहे हैं? –

+0

@ सिद्धार्थ रूट - मैं सेल ए 4 को दिखने के रूप में मानता हूं। जो कुछ मैं पूरा करने की कोशिश कर रहा हूं उस पर कुछ पृष्ठभूमि, मुझे एक विशेष सेल के बाएं और टॉप को खोजने की आवश्यकता है। तो मुझे कोशिकाओं के माध्यम से इसके बाईं ओर और इसके ऊपर की कोशिकाओं के माध्यम से पुन: प्रयास करने की आवश्यकता है। मुझे यह जांचने की ज़रूरत है कि क्या वे कक्ष दिखाई दे रहे हैं, और यदि वे हैं, तो मुझे उनकी चौड़ाई (या ऊंचाई) को जोड़ना होगा। जिस समस्या में मैं अभी चल रहा हूं, वह यह है कि कुछ कोशिकाएं जमे हुए हैं, और दृश्यमान सीमा के हिस्से के रूप में दिखाई नहीं देती हैं। मुझे यकीन नहीं है कि इससे कैसे निपटें। कोई मदद या सुझाव? –

+1

@ सिद्धार्थ रूट - मैंने यह पता लगाया कि सेल को "जमे हुए" या नहीं, निम्न कोड का उपयोग करके: 'फ़ंक्शन सेलइन्स इनफ्रोज़रेंज (सेल के रूप में सेल) ' ' बूंद इनरो बूलियन ' ' कॉल में कॉलम के रूप में कॉलम ' 'अगर (ActiveWindow.SplitRow> 0) फिर' 'inRow = नहीं छेड़छाड़ (सेल, रेंज (सेल (1, 1),' 'सेल (ActiveWindow.SplitRow, 1) .nd (xlEnd))) कुछ भी नहीं है ' 'अंत यदि' 'यदि (ActiveWindow.SplitColumn> 0) फिर' 'inColumn = नहीं अंतर (सेल, रेंज (कक्ष (1, 1), कक्ष (1, ActiveWindow.SplitColumn)। (XlDown))) कुछ भी नहीं है 'अंत अगर ' ' सेलआईएस इनफ्रोज़रेंज = (इनरो या इन कॉलम) ' ' एंड फ़ंक्शन ' –

उत्तर

14

यहाँ एक समारोह है कि आप क्या चाहते हैं:

Function CellIsInVisibleRange(cell As Range) 
CellIsInVisibleRange = Not Intersect(ActiveWindow.VisibleRange, cell) Is Nothing 
End Function 

कम से कम मैं यह करता है लगता है। मुझे अब तक VisibleRange संपत्ति के बारे में पता नहीं था।

कॉल इसे पसंद:

If CellIsInVisibleRange(ActiveSheet.Range("A35")) Then 
    MsgBox "Cell is visible" 
Else 
    MsgBox "Cell isn't visible" 
End If 
+0

+ 1 सेल दृश्यता की जांच के लिए मैं इसका उपयोग करता हूं और एक अन्य विविधता। –

+0

@DougGlancy - बहुत बहुत धन्यवाद। यह बहुत अच्छा काम करता है। –

+1

@ सिद्धार्थ रूट - आप किस दूसरे भिन्नता का उपयोग करते हैं? –