Shape.SetFormulas-Methode (Visio)

Legt die Formeln einer oder mehrerer Zellen fest.

Syntax

Ausdruck. SetFormulas( _SRCStream()_ , _formulaArray()_ , _Flags_ )

expression Eine Variable, die ein Shape-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 Shape-Objekte können Sie die SetFormulas-Methode verwenden, um Ergebnisse einer Reihe von Zellen 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.

Bei Shape-Objekten sollte SID_SRCStream() ein eindimensionales Array von 3 n ganzen 2-Byte-Zahlen für n>= 1 sein. Die SetFormulas-Methode interpretiert den Datenstrom folgendermaßen:

{sectionIdx, rowIdx, cellIdx }n

Dabei ist sectionIdx der Abschnittsindex der gewünschten Zelle, rowIdx ist deren Zeilenindex, und cellIdx ist deren Zellenindex.

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.

Das Flags-Argument 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.