Frage

Ich habe versucht, die Standorte aller Seitenumbrüche auf einem bestimmten Excel 2003-Arbeitsblatt über COM abzurufen. Hier ist ein Beispiel für die Art von Sache, ich versuche zu tun:

Excel::HPageBreaksPtr pHPageBreaks = pSheet->GetHPageBreaks();
long count = pHPageBreaks->Count;
for (long i=0; i < count; ++i)
{
  Excel::HPageBreakPtr pHPageBreak = pHPageBreaks->GetItem(i+1); 
  Excel::RangePtr pLocation = pHPageBreak->GetLocation();

  printf("Page break at row %d\n", pLocation->Row);

  pLocation.Release();
  pHPageBreak.Release();
}
pHPageBreaks.Release();

Ich erwarte, dass dies die Zeilennummern von jedem der horizontalen Seitenumbrüche in pSheet auszudrucken. Das Problem, das ich habe, ist, dass, obwohl count korrekt die Anzahl der Seitenumbrüche in dem Arbeitsblatt zeigt, kann ich immer nur den ersten zu holen scheinen. Auf dem zweiten Durchlauf durch die Schleife, pHPageBreaks->GetItem(i) Aufruf löst eine Ausnahme, mit Fehlernummer 0x8002000b „ungültiger Index“.

Der Versuch pHPageBreaks->Get_NewEnum() zu verwenden einen Enumerator, um über die Sammlung iterieren nicht auch mit dem gleichen Fehler, sofort auf den Anruf Get_NewEnum().

Ich habe nach einer Lösung, sah sich um, und das nächste, was ich gefunden habe, so weit ist http://support.microsoft.com/kb/210663/en-us . Ich habe verschiedene Zellen über die Seitenumbrüche versucht zu aktivieren, einschließlich den Zellen nur über den Bereich gedruckt werden soll, sowie die untere rechte Zelle (IV65536), aber es hat nicht geholfen.

Wenn jemand kann mir sagen, wie Excel bekommt die Standorte aller die Seitenumbrüche in einem Blatt zurück, das wäre genial!

Danke.

@ Joel: Ja, ich habe versucht, die Benutzeroberfläche anzuzeigen, und dann ScreenUpdating auf true setzen - es die gleichen Ergebnisse. Auch ich habe da versucht Kombinationen von pSheet->PrintArea auf den gesamten Arbeitsblatt Einstellung und / oder rufen pSheet->ResetAllPageBreaks() vor meinem Anruf die HPageBreaks Sammlung zu erhalten, die nicht auch nicht helfen.

@ Joel: Ich habe pSheet->UsedRange verwendet, um die Zeile zu bestimmen Vergangenheit zu blättern, und Excel nicht scrollen vorbei an allen horizontalen Pausen, aber ich habe immer noch das gleiche Problem, wenn ich versuche, die zweiten zuzugreifen. Leider half auch nicht zu Excel 2007 umgeschaltet wird.

War es hilfreich?

Lösung

Das Experimentieren mit Excel 2007 von Visual Basic, entdeckte ich, dass die Seitenumbruch ist nicht bekannt, es sei denn, es auf dem Bildschirm mindestens einmal angezeigt wurde.

Die beste Abhilfe Ich war zu Seite finden konnte, von oben nach unten des Blattes in die letzte Zeile der Daten enthält. Dann können Sie alle Seitenumbrüche aufzuzählen.

Hier ist der VBA-Code ... lassen Sie mich wissen, wenn Sie Probleme haben, diese zu COM Umwandlung:

Range("A1").Select
numRows = Range("A1").End(xlDown).Row

While ActiveWindow.ScrollRow < numRows
    ActiveWindow.LargeScroll Down:=1
Wend

For Each x In ActiveSheet.HPageBreaks
    Debug.Print x.Location.Row
Next

Dieser Code aus einer vereinfachenden Annahme:

  • Ich benutzte die .End (xlDown) Methode, um herauszufinden, wie weit die Daten geht ... setzen voraus, dass kontinuierliche Daten von A1 bis auf den Boden des Blattes haben. Wenn Sie dies nicht tun, müssen Sie eine andere Methode verwenden, um herauszufinden, wie weit eine Rolle zu halten.

Andere Tipps

Haben Sie auf True gesetzt ScreenUpdating, wie im KB-Artikel erwähnt?

Sie möchten vielleicht tatsächlich auf True umschalten einen Bildschirm Neuzeichnen zu erzwingen. Es klingt wie die Berechnung von Seitenumbrüchen ist ein Nebeneffekt tatsächlich die Seite dargestellt wird, sondern als etwas, Excel auf Nachfrage der Fall ist, so haben Sie eine Seitendarstellung auf dem Bildschirm ausgelöst wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top