Método Shape.SetFormulas (Visio)
Define as fórmulas de uma ou mais células.
Sintaxe
expression. SetFormulas
( _SRCStream()_
, _formulaArray()_
, _Flags_
)
expressão Uma variável que representa um objeto Shape.
Parâmetros
Nome | Obrigatório/Opcional | Tipo de dados | Descrição |
---|---|---|---|
SID_SRCStream() | Obrigatório | Integer | Fluxo que identifica as células a serem modificadas. |
formulaArray() | Obrigatório | Variant | Fórmulas a serem atribuídas às células identificadas. |
Flags | Obrigatório | Integer | Sinalizadores que influenciam o comportamento de SetFormulas. |
Valor de retorno
Número inteiro
Comentários
O método SetFormulas se comporta como a propriedade Formula, exceto que você pode usá-lo para definir as fórmulas de várias células de uma vez, em vez de uma célula por vez.
Para objetos Shape, você pode usar o método SetFormulas para definir resultados de qualquer conjunto de células. Informe o método SetFormulas sobre quais células deseja definir passando uma matriz de números inteiros em SID_SRCStream(). SID_SRCStream() é uma matriz unidimensional de números inteiros de 2 bytes.
Para objetos Shape , SID_SRCStream() deve ser uma matriz unidimensional de 3 n 2 bytes inteiros para n>= 1. O método SetFormulas interpreta o fluxo como:
{sectionIdx, rowIdx, cellIdx }n
onde sectionIdx é o índice da seção da célula desejada, rowIdx é seu índice de linha e cellIdx é seu índice de célula.
O parâmetro formulaArray() deve ser uma matriz unidimensional de 1 <= m variants. Cada Variant deve ser uma String, uma referência a uma String ou Empty. Se formulaArray(i) estiver vazia, a célula i 'th será definida como a fórmula em formulaArray(j), em que j é o índice da entrada anterior mais recente que não está vazia. Se não houver uma entrada anterior que não esteja vazia, a célula correspondente não será alterada. Se menos fórmulas do que as células forem especificadas ( m<n ), a célula i 'th, i>m , será definida como a mesma fórmula que foi escolhida para definir a célula m 'th como. Assim, para definir várias células como a mesma fórmula, você precisa apenas passar uma cópia da fórmula.
O argumento Flags deve ser uma bitmask dos valores a seguir.
Constant | Valor | Descrição |
---|---|---|
visSetBlastGuards | &H2 | Substitui os valores das células presentes mesmo que estejam protegidas. |
visSetTestCircular | &H4 | Testa o estabelecimento de referências de células circulares. |
visSetUniversalSyntax | &H8 | As fórmulas estão em sintaxe universal. |
O valor retornado pelo método SetFormulas é o número de entradas em SID_SRCStream() que foram processadas com êxito. Se asentradas i <n processarem corretamente, mas ocorrer um erro na i + 1ª entrada, o método SetFormulas gerará uma exceção e retornará i. Caso contrário, n será retornado.
Exemplo
A macro a seguir mostra como usar o método SetFormulas. Ela presume que haja uma página do Microsoft Office Visio ativa com pelo menos três formas. Ela usa o método GetFormulas para obter a largura da forma 1, a altura da forma 2 e o ângulo da forma 3. Em seguida, usa SetFormulas para definir a largura da forma 1 para a altura da forma 2 e a altura da forma 2 para a largura da forma 1. O ângulo da forma 3 fica inalterado.
Este exemplo usa o método GetFormulas do objeto Page para obter três fórmulas de células e o método SetFormulas do mesmo objeto para definir as fórmulas. A matriz de entrada tem quatro slots para cada célula, como também teria para objetos Master. Para objetos Shape ou Style, apenas três slots são necessários para cada célula (seção, linha e célula).
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
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.