Page.SetFormulas-Methode (Visio)
Legt die Formeln einer oder mehrerer Zellen fest.
Syntax
Ausdruck. SetFormulas
( _SID_SRCStream()_
, _formulaArray()_
, _Flags_
)
Ausdruck Eine Variable, die ein Page-Objekt darstellt.
Parameter
Name | Erforderlich/Optional | Datentyp | Beschreibung |
---|---|---|---|
SID_SRCStream() | Erforderlich | Integer | Datenstrom, der die zu ändernden Zellen identifiziert. |
formulaArray() | Erforderlich | Variant | Formeln, die den identifizierten Zellen zugewiesen werden sollen. |
Flags | Erforderlich | Integer | Kennzeichen, die das Verhalten von SetFormulas beeinflussen. |
Rückgabewert
Ganze Zahl
Hinweise
Die SetFormulas-Methode verhält sich wie die Formula-Eigenschaft, jedoch können Sie damit die Formeln vieler Zellen gleichzeitig festlegen, statt für eine Zelle zurzeit.
Für Page-Objekte können Sie die SetFormulas-Methode verwenden, um Ergebnisse einer Reihe von Zellen in einer Reihe von Shapes des Zeichenblatts oder des Masters festzulegen. Sie bestimmen für die SetFormulas-Methode, welche Zellen festgelegt werden sollen, indem Sie in SID_SRCStream() ein Array ganzer Zahlen übergeben. SID_SRCStream() ist ein eindimensionales Array von ganzen 2-Byte-Zahlen.
Für Page-Objekte sollte SID_SRCStream() ein eindimensionales Array von 4 n ganzen 2-Byte-Zahlen für n>= 1 sein. Die SetFormulas-Methode interpretiert den Datenstrom folgendermaßen:
{sheetID, sectionIdx, rowIdx, cellIdx }n
Dabei ist sheetID die ID-Eigenschaft des Shape-Objekts auf dem Zeichenblatt oder Master, dessen Zellergebnis geändert werden soll.
Wenn sheetID in einem Eintrag visInvalShapeID (-1) ist oder wenn das untere Byte von sectionIdx visSectionInval (255) ist, wird der Eintrag von der SetResults-Methode ignoriert. Dies liegt daran, dass das gleiche SID_SRCStream() -Array für mehrere Aufrufe von SetFormulas, GetFormulas und ähnlichen Methoden verwendet werden kann, wobei der Aufrufer nur geringfügige Änderungen am Stream zwischen Aufrufen vornehmen muss.
Der formulaArray() -Parameter sollte ein eindimensionales Array von 1 <= m Varianten sein. Jeder Variant-Wert sollte eine Zeichenfolge, ein Verweis auf eine Zeichenfolge oder Leer sein. Wenn formulaArray(i) leer ist, wird die zelle i auf die Formel in formulaArray(j) festgelegt, wobei j der Index des letzten vorherigen Eintrags ist, der nicht leer ist. Wenn kein nicht leerer Eintrag vorhanden ist, wird die entsprechende Zelle nicht geändert. Wenn weniger Formeln als Zellen angegeben werden ( m<n ), wird die i'te Zelle, i>m , auf dieselbe Formel festgelegt, die zum Festlegen der m 'ten Zelle auf ausgewählt wurde. Sie müssen also nur eine Kopie der Formel übergeben, um viele Zellen auf die gleiche Formel festzulegen.
Der Flags-Parameter sollte eine Bitmaske der folgenden Werte sein.
Konstante | Wert | Beschreibung |
---|---|---|
visSetBlastGuards | &H2 | Setzt die vorhandenen Zellwerte außer Kraft, sogar wenn sie geschützt sind. |
visSetTestCircular | &H4 | Test für die Einrichtung von Zirkelzellverweisen. |
visSetUniversalSyntax | &H8 | Formeln weisen eine universelle Syntax auf. |
Der von der Methode SetFormulas zurückgegebene Wert ist die Anzahl von Einträgen in SID_SRCStream(), die erfolgreich verarbeitet wurden. Wenn i<n-Einträge ordnungsgemäß verarbeitet werden, aber ein Fehler für den Eintrag i + 1 auftritt, löst die SetFormulas-Methode eine Ausnahme aus und gibt i zurück. Andernfalls wird n zurückgegeben.
Beispiel
Mit dem folgenden Makro wird gezeigt, wie die SetFormulas-Methode verwendet wird. Voraussetzung für das Makro ist ein aktives Microsoft Office Visio-Zeichenblatt mit mindestens drei Shapes. Die GetFormulas-Methode wird dazu verwendet, die Breite von Shape 1, die Höhe von Shape 2 und den Winkel von Shape 3 abzurufen. Dann wird mit SetFormulas die Breite von Shape 1 auf die Höhe von Shape 2 und die Höhe von Shape 2 auf die Breite von Shape 1 festgelegt. Der Winkel von Shape 3 wird nicht geändert.
In diesem Beispiel wird die GetFormulas-Methode des Page-Objekts verwendet, um drei Zellformeln abzurufen, und die SetFormulas-Methode des gleichen Objekts, um die Formeln festzulegen. Das Eingabearray weist vier Umsetzungsplätze für jede Zelle aus, dies wäre auch für Master-Objekte der Fall. Für Shape- oder Style-Objekte sind für jede Zelle nur drei Umsetzungsplätze erforderlich (Abschnitt, Zeile und Zelle).
Public Sub SetFormulas_Example()
On Error GoTo HandleError
Dim aintSheetSectionRowColumn(1 To 3 * 4) As Integer
aintSheetSectionRowColumn(1) = ActivePage.Shapes(1).ID
aintSheetSectionRowColumn(2) = visSectionObject
aintSheetSectionRowColumn(3) = visRowXFormOut
aintSheetSectionRowColumn(4) = visXFormWidth
aintSheetSectionRowColumn(5) = ActivePage.Shapes(2).ID
aintSheetSectionRowColumn(6) = visSectionObject
aintSheetSectionRowColumn(7) = visRowXFormOut
aintSheetSectionRowColumn(8) = visXFormHeight
aintSheetSectionRowColumn(9) = ActivePage.Shapes(3).ID
aintSheetSectionRowColumn(10) = visSectionObject
aintSheetSectionRowColumn(11) = visRowXFormOut
aintSheetSectionRowColumn(12) = visXFormAngle
'Return the formulas of the cells.
Dim avarFormulaArray() As Variant
ActivePage.GetFormulas aintSheetSectionRowColumn, avarFormulaArray
'Use SetFormulas to:
' - Set the width of shape 1 to height of shape 2.
' - Set height of shape 2 to width of shape 1.
' Note: avarFormulaArray() is indexed from 0 to 2.
Dim varTemp As variant
varTemp = avarFormulaArray(0)
avarFormulaArray(0) = avarFormulaArray(1)
avarFormulaArray(1) = varTemp
'Pass the same array back to SetFormulas that we
'just passed to GetFormulas, leaving angle alone. By setting
'the sheet ID entry in the third slot of the
'aintSheetSectionRowColumn array to visInvalShapeID,
'we tell SetFormulas to ignore that slot.
aintSheetSectionRowColumn (9) = visInvalShapeID
'Tell Microsoft Visio to set the formulas of the cells.
ActivePage.SetFormulas aintSheetSectionRowColumn, avarFormulaArray, 0
Exit Sub
HandleError:
MsgBox "Error"
Exit Sub
End Sub
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.