أتمتة التفوق. تحتاج إلى تحديد عناصر متعددة من نطاق

StackOverflow https://stackoverflow.com/questions/273425

سؤال

ولدي التعليمات البرمجية التي تتيح لي اختيار عنصر واحد في أرانجي:

        COleVariant vItems = cstrAddr;
        hr = AutoWrap(
                            DISPATCH_PROPERTYGET, 
                            &vCell, 
                            irange, 
                            L"Item", 
                            2,
                            COleVariant((short)(1)), 
                            COleVariant((short)(1)));
        if (FAILED(hr)) return hr;


        // Use the dispatch interface to select the cell
        COleVariant result;
        hr = AutoWrap(
                        DISPATCH_METHOD, 
                        &result, 
                        vCell.pdispVal, 
                        L"Select", 
                        0);
        if (FAILED(hr)) return hr;

وهذا يعمل بشكل جيد. ومع ذلك، ولست بحاجة لتحديد كافة الخلايا في نطاق، ولكن لم أكن قادرة على العثور على طريقة لتحديد هذا في الدعوة "الحصول على" لالخاصية عنصر. حاولت استخدام -1، -1 ... حاول المارة في زوج من BSTR في المتغيرات 2، تحديد نطاق القولون فصل الأعمدة ومجموعة من الصفوف. كما حاول تمرير في معلمة واحدة من سلسلة من مواصفات النطاق. عمل لا شيء.

على تحديث : في وحاولت أيضا

hr = iRange->Select(vResult);

وهذا لا يعود S_OK، ولكن لا تحديد النطاق. عادة، وأنا لا يمكن الاتصال مباشرة على وظائف في البنية iRange. والنتيجة هي انتهاك GPF أو الوصول - لذلك يجب أن تستخدم الدالة autowrap (لدفع مكالمة استدعاء). لست مندهشا لا تعمل هذه المكالمة. آمل أن أتمكن من الحصول على هذا العمل .... انها آخر قطعة من هذا المشروع.

هل كانت مفيدة؟

المحلول 2

ولقد وجدت الإجابة على هذا السؤال. ويبدو فقط أن تكون مشكلة عند استخدامها في عينة DSOFRAMER (مايكروسوفت KB 311765). DSOFramer هو عنصر تحكم ActiveX للأغراض العامة لتضمين وثائق مايكروسوفت أوفيس. المشكلة أيضا لا يحدث إلا في بناء تصحيح. نسخ الإصدار على ما يرام.

وكما أنني وجدت الحل الذي يعمل على الإفراج عنهم أو التصحيح بناء: الحصول على أي خلية في النطاق (باستخدام get_Item)، ثم استدعاء حدد على هذا البند، ثم حدد مرة أخرى لإلغاء تحديده. بمجرد أن يتم ذلك، وحدد يمكن أن يطلق على مجموعة. على ما يبدو، لا يمكن أن يسمى على نطاق تحديد ما إذا كان هناك خلية محددة بالفعل (أو ربما إذا كانت الدولة الاختيار غير محددة).

نصائح أخرى

ولم تكن مألوفة مع هذا النوع من التعليمات البرمجية (في VB انها كثيرا، أسهل بكثير للقيام أتمتة) وأعتقد أن في المثال الخاص بك التي يتم تحديد خلية واحدة من مجموعة باستخدام الخاصية عنصر وطريقة تحديد. صحيح؟

وحتى في VB

Dim oRange as Range
Dim oCell as Range

 Set oRange = WorkSheet.Range("A1:A10") '<-- get range
 Set oCell = oRange.Item(1)             '<-- returns first cell in range
 oCell.Select                           '<-- selects first cell

والمشكلة هي الخاصية عنصر يعود فقط خلية واحدة - لديك لتطبيق أسلوب تحديد لمجموعة الأصلي

Dim oRange as Range

 Set oRange = WorkSheet.Range("A1:A10") '<-- get range
 oRange.Select                          '<-- Selects the range
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top