Excel-Automatisierung. Benötigen Sie mehrere Artikel aus einem Bereich wählen
-
07-07-2019 - |
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.
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