2009-02-23 34 views
5

इस के लिए जाँच हो रही है कुछ मैं पिछले साल में भाग है, और इसलिए यह :)संस्करण मूल्य "कुछ भी नहीं"

क्यू दस्तावेज़ के लिए एक अच्छी जगह की तरह लगता है: से एक्सेल स्वचालित जब (/ शब्द/...) डेल्फी, मैं कैसे जांच सकता हूं कि एक एक्सेल फ़ंक्शन ने Nothing (जैसा कि इसे वीबीए में कहा जाता है) को वापस कर दिया है?

उत्तर

8

VarIsClear फ़ंक्शन में आपकी स्थिति शामिल है जहां प्रकार varDispatch है और मान nil है। इसमें खाली और "अज्ञात" मान भी शामिल हैं, और कस्टम संस्करण प्रकार भी शामिल हैं। मैं इसे अपने डेल्फी 2005 स्रोत में देखता हूं; मुझे नहीं पता कि इसे कितना पहले शामिल किया गया था।

+0

? आप सही हे! मैंने पूरी तरह से अनदेखा किया! मैंने आपका जवाब स्वीकार कर लिया है, और मेरा स्रोत कोड बदल देगा ;-) धन्यवाद एक गुच्छा! – onnodb

4

मजे की बात है, VBA के NothingनहींUnassigned, Null या Empty के रूप में ही, है, इसलिए आप उपयोग नहीं कर सकते जैसे:

// Worksheet is a TExcelWorksheet or OleVariant coupled to an open worksheet 
MyRange := Worksheet.Range['MyRangeInTheWorksheet', EmptyParam] 
if (MyRange = Null) then // won't work! 
    MsgBox('The range doesn''t exist!'); 

इसकी बजाय यह कार्य का उपयोग करें:

function VarIsNothing(V: OleVariant): Boolean; 
begin 
    Result := 
    (TVarData(V).VType = varDispatch) 
    and 
    (TVarData(V).VDispatch = nil); 
end; 

// ... 

if (VarIsNothing(MyRange)) then 

अद्यतन

जाहिर है, आरटीएल इकाई Variants.pas के स्रोत डेल्फी 5 और 2007 के बीच बदल गए हैं। @ माघी (टिप्पणियां देखें) के अनुसार, कार्य VarIsEmpty ने डी 5 में काम किया होगा। हालांकि, डी 2007 में, यह अब मामला प्रतीत नहीं होता है, इसलिए आपको शायद उपरोक्त फ़ंक्शन की आवश्यकता होगी।

इसके अलावा, ध्यान दें कि VBA के Nothing शायद काफी एक विशेष मामला है; मुझे नहीं लगता कि एक स्वचालन के साथ अक्सर इसका सामना करता है।

+0

@onnodb: अगर जगह "(MyRange = अशक्त)" "VarIsNull (MyRange) या VarIsEmpty (MyRange)" काम करता है मैं विनम्रता से क्रेग की जवाब को स्वीकार सुझाव देंगे साथ। पुस्तकालय में पहले से मौजूद सामग्री के लिए कस्टम फ़ंक्शंस लिखने की आवश्यकता नहीं है और दस्तावेज है। – mghie

+0

@mghie: मैं बहुत उन करना यकीन है * नहीं * कि परेशान 'Nothing' मूल्य :) साथ काम – onnodb

+0

@onnodb: ठीक है, VarIsEmpty() के स्रोत कोड पर एक नजर है - यह आपके कोड के सुपरसेट है, कम से कम डेल्फी 5 संस्करण में मैं अभी ... – mghie

2

करता VarIsEmpty (VarIsNull से भिन्न हो) ऐसा नहीं है कि तुम क्या चाहते हो?

+0

शायद समस्याग्रस्त यह है कि VarIsEmpty एक्सेल द्वारा लौटाए गए varErrors को संभाल नहीं करता है। –

+0

नहीं, मुझे पूरा यकीन है कि 'खाली' कुछ भी नहीं है 'कुछ भी नहीं' --- बाद में ऐसा लगता है कि डेल्फी में * कोई * समकक्ष नहीं है। (मैं निश्चित रूप से गलत हो सकता हूं, लेकिन मुझे पूरा यकीन है कि मैंने इसे चेक किया है)। हालांकि धन्यवाद! – onnodb

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