Método Master.SetFormulas (Visio)
Establece las fórmulas de una o varias celdas.
Sintaxis
expresión. SetFormulas
( _SID_SRCStream()_
, _formulaArray()_
, _Flags_
)
Expresión Variable que representa un objeto Master .
Parameters
Nombre | Obligatorio/opcional | Tipo de datos | Descripción |
---|---|---|---|
SID_SRCStream() | Obligatorio | Integer | Secuencia que identifica las celdas que se desean modificar. |
formulaArray() | Obligatorio | Variant | Fórmulas que se desean asignar a las celdas identificadas. |
Flags | Obligatorio | Integer | Marcas que influyen en el comportamiento de SetFormulas. |
Valor devuelto
Entero
Observaciones
El método SetFormulas se comporta de forma similar a la propiedad Formula, pero difiere en que también se puede utilizar para establecer las fórmulas de varias celdas al mismo tiempo, en lugar de hacerlo de una en una.
En el caso de los objetos Master , puede usar el método SetFormulas para establecer los resultados de cualquier conjunto de celdas en cualquier conjunto de formas de la página o del patrón. Para indicar al método SetFormulas las celdas que desea establecer, pásele una matriz de enteros en SID_SRCStream(). SID_SRCStream() es una matriz unidimensional de enteros de 2 bytes.
Para los objetos masterSID_SRCStream() debe ser una matriz unidimensional de 4 n enteros de 2 bytes para n>= 1. El método SetFormulas interpreta la secuencia como:
{sheetID, sectionIdx, rowIdx, cellIdx }n
donde sheetID es la propiedad ID del objeto Shape de la página o el patrón cuyo resultado de celda se desea modificar.
Si sheetID en una entrada es visInvalShapeID (-1) o si el byte de menor peso de sectionIdx es visSectionInval (255), el método SetResults omite dicha entrada. Esto se debe a que la misma matriz de SID_SRCStream se puede usar en varias llamadas a SetFormulas, GetFormulas y métodos similares con el autor de la llamada solo necesita realizar cambios menores en la secuencia entre llamadas.
El parámetro formulaArray() debe ser una matriz unidimensional de 1 <= variantes m . Cada valor Variant debería ser un String, una referencia a un String o Empty. Si formulaArray(i) está vacío, la celda i 'th se establecerá en la fórmula en formulaArray(j), donde j es el índice de la entrada anterior más reciente que no está vacía. Si no hay ninguna entrada previa no vacía, la celda correspondiente no se modifica. Si se especifican menos fórmulas que celdas ( m<n ), la celda i 'th, i>m , se establecerá en la misma fórmula que se eligió para establecer la celda m 'th en . De esta manera, para establecer varias celdas en la misma fórmula sólo necesita pasar una copia de ésta.
El argumento Flags debe ser una máscara de bits de los valores siguientes.
Constante | Valor | Descripción |
---|---|---|
visSetBlastGuards | &H2 | Reemplaza los valores actuales de las celdas aunque estén protegidos. |
visSetTestCircular | &H4 | Comprueba el establecimiento de referencias circulares a celdas. |
visSetUniversalSyntax | &H8 | Las fórmulas se expresan en la sintaxis universal. |
El valor devuelto por el método SetFormulas es el número de entradas de SID_SRCStream() que se han procesado correctamente. Si las entradas de i<n se procesan correctamente, pero se produce un error en la entrada i + 1, el método SetFormulas genera una excepción y devuelve i. De lo contrario, se devuelve n.
Ejemplo
La macro siguiente muestra cómo utilizar el método SetFormulas. Se da por hecho que existe una página de Microsoft Office Visio activa que contiene al menos tres formas. Utiliza el método GetFormulas para obtener el ancho de la forma 1, el alto de la forma 2 y el ángulo de la forma 3. A continuación, utiliza SetFormulas para establecer el ancho de la forma 1 en el alto de la forma 2 y el alto de la forma 2 en el ancho de la forma 1. El ángulo de la forma 3 no se modifica.
Este ejemplo utiliza el método GetFormulas del objeto Page para obtener tres fórmulas de celda y el método SetFormulas del mismo objeto para establecer dichas fórmulas. La matriz de entrada tiene cuatro posiciones para cada celda, como en el caso de los objetos Master. En el caso de los objetos Shape o Style, sólo se necesitarían tres posiciones para cada celda (sección, fila y celda).
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
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.