Compartilhar via


Método Page.SetFormulas (Visio)

Define as fórmulas de uma ou mais células.

Sintaxe

expression. SetFormulas( _SID_SRCStream()_ , _formulaArray()_ , _Flags_ )

Expressão Uma variável que representa um objeto Page .

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 Page, você pode usar o método SetFormulas para definir resultados de qualquer conjunto de células em qualquer conjunto de formas da página ou mestre. 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 PageSID_SRCStream() deve ser uma matriz unidimensional de 4 n 2 bytes inteiros para n>= 1. O método SetFormulas interpreta o fluxo como:

{sheetID, sectionIdx, rowIdx, cellIdx }n

onde sheetID é a propriedade ID do objeto Shape na página ou mestre cujo resultado de célula deve ser modificado.

Se sheetID em uma entrada for visInvalShapeID (-1) ou se o byte inferior de sectionIdx for visSectionInval (255), a entrada será ignorada pelo método SetResults. Isso ocorre porque a mesma matriz SID_SRCStream() pode ser usada em várias chamadas para SetFormulas, GetFormulas e métodos semelhantes com o chamador precisando apenas fazer pequenas alterações no fluxo entre chamadas.

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 parâmetro 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.