locked
FormulaR1C1 - Inserir fórmula em célula a partir do VBA

    Question

  • Prezados Desenvolvedores:

    Preciso imprimir um planilha que contem várias folhas, cujo número de linhas por folha e alterado de acordo com o texto a ser inserido em cada uma delas. Portanto, uma folha pode apresentar como última linha "46", "47" ou "48", etc...

    Na última linha da primeira folha vou inserir um "SUBTOTAL A TRANSPORTAR". Na primeira linha da segunda folha vou inserir "SUBTOTAL DE TRANSPORTE" e, assim sucessivamente até a última folha.

    Através do código abaixo consegui inserir o SUBTOTAL corretamente.

    Set ValorPrincipal = Worksheets(strDtInicial).Range("E133:E" & UltimaLinha)
    Subtotal_ValorPrincipal = Application.WorksheetFunction.Sum(ValorPrincipal)
    Worksheets(strDtInicial).Range("E" & UltimaLinha).Value = Subtotal_ValorPrincipal
    

    Entretanto, se for necessário fazer alteração nos valores, o SUBTOTAL não se altera, ou seja, não é recalculado automaticamente. Isto porque, na célula que introduzi o SUBTOTAL através do código citado não foi incluída fórmula do excel.

    Estou tentando alterar o código para o seguinte:

    Row = UltimaLinha - 133
    Range("E" & UltimaLinha).Select
    ActiveCell.FormulaR1C1 = "=SUM(R[-41]C:R[-1]C)"
    

    Através desse código é inserido a fórmula do excel na célula respectiva e, caso seja efetuada alteração nos valores da planilha o SUBTOTAL é recalculado automaticamente.

    Entretanto, como o valor da ultima linha não é constante, tenho que alterar o código para substituir o valor da última linha [-41] pelo valor da variável Row, porém não estou conseguindo.

    Preciso de ajuda para a solução de citado problema.

    Muito Obrigado!

    Thursday, July 23, 2009 11:47 PM

Answers

  • Ops...Houve um erro de sintaxe....
    Coloque desta forma aqui:
    ActiveCell.Formula = "=SUM(E133:E" & UltimaLinha & ")"

    [ ]s
    Adilson Soledade - MOS
    Saturday, July 25, 2009 11:48 AM

All replies

  • Experimente inserir a fórmula deste modo:
    ActiveCell.Formula = "=SUM("E133:E" & UltimaLinha & ")" 
    [ ]s


    Adilson Soledade - MOS
    Friday, July 24, 2009 9:15 AM
  • Boa Tarde Adilson.

    Muito Obrigado pela sua atenção, mas infelizmente não deu certo.

    O VB não aceitou a linha de código. Quando a inseri ela ficou "VERMELHA" e apareceu mensagem de erro de aplicativo.

    Tentei utilizar a sua idéia e implementei várias alteracões e, mesmo assim, não consegui.

    Muito Obrigado!
    Friday, July 24, 2009 5:45 PM
  • Ops...Houve um erro de sintaxe....
    Coloque desta forma aqui:
    ActiveCell.Formula = "=SUM(E133:E" & UltimaLinha & ")"

    [ ]s
    Adilson Soledade - MOS
    Saturday, July 25, 2009 11:48 AM
  • Maravilha! Perfeito!

    Muito Obrigado.

    Saturday, July 25, 2009 1:26 PM
  • Não tem de quê.
    [ ]s

    Adilson Soledade - MOS
    Thursday, July 30, 2009 1:46 AM
  • Olá,

     

    Estou criando uma macro pra atualizar meus vinculos automaticamente, em 720 linhas, o vinculo é este:

     

    =SEERRO(PROCV(A22;'C:\MEMORIA_CALCULO\LOTE_03_OUTUBRO\[LOTE 03S CT.066-10 MED.xlsm]MEDIÇÃO 11'!$A$16:$Q$2000;2;FALSO);"")

     

    Pra inserir o vinculo em todas as linhas a que eu quero, a macro ja ta pronta, é esta:

     

    Sub Insere_Formula()
    
        Dim i As Range
        Dim Valores As String
        Dim Conta_Planilha As Integer
        Dim Nome_Planilha As String
        
        For Conta_Planilha = 1 To 1
            'Sheets(Conta_Planilha).Select
            Nome_Planilha = Sheets(Conta_Planilha).Name
            MsgBox "Nome da Planilha  : " & Nome_Planilha
        
            Sheets(Conta_Planilha).Select
        
            For Each i In Range("E23:E24")
                If i.Value <> Empty Then
                    Valores = i.Offset(rowOffset:=0, columnOffset:=-3).Value
                    '----- insere formula ---'
                    'ActiveCell.FormulaR1C1 = "=IF(LEFT('Croqui v1'!R[-1]C[29],2)=""TR"",'Croqui v1'!R[-1]C[29],"" "")"
                    'ActiveCell.FormulaR1C1 = "=SEERRO(PROCV(A22;'C:\MEMORIA_CALCULO\LOTE_03_OUTUBRO\[LOTE 03S CT.066-10 MED.xlsm]MEDIÇÃO 11'!$A$16:$Q$2000;2;FALSO);"")"
                    MsgBox "Valores são  " & Valores
                    '------------------------'
                End If
            Next i
        Next Conta_Planilha
    
    End Sub

    esta linha não funciona:

     

    ActiveCell.FormulaR1C1 = "=SEERRO(PROCV(A22;'C:\MEMORIA_CALCULO\LOTE_03_OUTUBRO\[LOTE 03S CT.066-10 MED.xlsm]MEDIÇÃO 11'!$A$16:$Q$2000;2;FALSO);"")"

    q é a linha q insere a formula com Procv, nas 720 linhas q preciso. Alguem sugere uma outra forma de fazre isso?

    E ja que estou aqui, o excel pede pra atualizar o link a cada mudança, tem como desativar isso somente na hora q estou trocando os links e ativar depois atualização dos links?

    Desde já agradeço

    Anderson Dorneles
    Thursday, October 27, 2011 8:47 PM
  • como fazer com q a célula receba =SE(D2<>"";SE(O2<>"Baixado";HOJE()-D2;P2-D2);"-")

    estou usando o as seguintes instruções...

    rowcount = Worksheets("impressas").Range("a1").CurrentRegion.Rows.Count
         With Worksheets("impressas").Range("a1")
        .Offset(rowcount, 0).Value = Me.trfa.Value
        .Offset(rowcount, 16).Value = Application.ActiveCell.FormulaR1C1 = _
            "=IF(RC[-13]<>"""",IF(RC[-2]<>""Baixado"",RC[-13]-TODAY(),RC[-13]-RC[-1]),""-"")"

            Sheets("Aut.Coleta").Select
    End With 

    porem na planilha a celula esta recebendo = "FALSO"

            
    Friday, June 20, 2014 5:43 PM
  • Adailton,

    Continuação do tópico em: http://social.msdn.microsoft.com/Forums/pt-BR/fa498da9-348f-403b-ae96-09889bde84db/offsetrowcount-1valueformula-se?forum=vbapt


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Friday, June 20, 2014 9:53 PM
    Moderator