Frage

Ich habe Code, der mir ein einzelnes Element in arange auswählen können:

        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;

Das funktioniert gut. Ich brauche aber alle Zellen im Bereich auszuwählen, aber ich habe nicht einen Weg finden, um anzugeben, das in dem „get“ Aufruf für die Item-Eigenschaft konnte. Versuchte -1 verwenden, -1 ... versucht vorbei in einem Paar von BSTR in den 2 Varianten, einen Doppelpunkt getrennt Bereich von Spalten und eine Vielzahl von Zeilen angibt; auch versucht, in einem einzigen Parameter aus einer Reihe von Bereichsspezifikation übergeben. Keine gearbeitet.

Aktualisieren : Ich habe auch versucht,

hr = iRange->Select(vResult);

Das zurückkehrt S_OK, aber es funktioniert nicht wählen Sie den Bereich. Normalerweise kann es nicht direkt die Funktionen in dem iRange struct nennen; das Ergebnis ist eine GPF oder Zugriffsverletzung - so hat ich die autowrap Funktion verwenden (einen Invoke Aufruf zu fahren). Ich bin dieser Anruf nicht überrascht nicht funktioniert. Hoffe, dass ich diese Arbeit bekommen kann .... es das letzte Stück dieses Projektes ist.

War es hilfreich?

Lösung 2

fand ich die Antwort auf diese Frage. Dies scheint nur ein Problem, wenn in der DSOFRAMER Probe (Microsoft KB 311765) verwendet werden. DSOFramer ist ein Allzweck-ActiveX-Steuerelement für MS Office Dokumente einzubetten. Das Problem auch geschieht nur in einer Debug-Build; Release-Builds sind in Ordnung.

Ich fand auch eine Abhilfe, die auf Freigabe oder Debug-Build funktioniert: erhalten jede Zelle im Bereich (mit get_Item), dann auf das Element wählen rufen, dann wieder wählen, um es deselektieren. Sobald das erledigt ist, kann die Auswahl auf dem Bereich aufgerufen werden. Offenbar wählen kann nicht auf dem Bereich genannt werden, wenn eine Zelle ist bereits ausgewählt (oder vielleicht, wenn der Auswahlzustand nicht definiert ist).

Andere Tipps

Nicht mit dieser Art von Code vertraut (in VB viel es ist, viel einfache Automation zu tun) ich in Ihrem Beispiel denken Sie eine Zelle aus einem Bereich mit der Item-Eigenschaft und die Select-Methode auswählen. Richtig?

So in 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

Das Problem ist, Item-Eigenschaft liefert nur eine Zelle -. Sie die Select-Methode auf den ursprünglichen Bereich anwenden müssen,

Dim oRange as Range

 Set oRange = WorkSheet.Range("A1:A10") '<-- get range
 oRange.Select                          '<-- Selects the range
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top