Pergunte aqui
1

Criar macro cont.valores

perguntadas 2021-04-23 00:58:35 +0200

imagem do gravatar de WBastos

updated 2021-04-29 00:16:35 +0200

imagem do gravatar de Schiavinatto

Estou precisando contar o número de linhas de uma coluna específica e, depois de muito pesquisar, acabei não encontrando algo que me atenda. Sei que a propriedade LastRow = oCursor.getRangeAddress().EndRow tem a finalidade de encontrar a última linha, mas ela considera qualquer posição dentro da planilha.

Um recurso alternativo que encontrei foi colocar a fórmula =CONT.VALORES(B:B) na célula "C2" e depois faço referência na macro NovaLinha = oPlan.getCellRangeByName("C2").Value + 5, mas gostaria de colocar a função diretamente na macro, sem precisar colocar a fórmula na planilha.

Alguém faz ideia de como fazer?

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

2 Respostas

2

respondidas 2021-04-28 23:49:07 +0200

imagem do gravatar de WBastos

updated 2021-04-29 12:46:46 +0200

Obrigado pelo retorno @Schiavinatto, mas consegui avançar com a macro:

Sub Lancar
    oPlan = ThisComponent.Sheets.getbyName("Lancamento")
    fServico = CreateUnoService("com.sun.star.sheet.FunctionAccess")
    nLinha = fServico.CallFunction("COUNTA",array(oPlan.getCellRangeByName("B:B"))) + 1

    With oPlan  
           .getCellbyPosition( 1, nLinha).Value = cDate(Format(oDlg.GetControl("dtfData").Text, "dd/mm/yyyy"))
        '[continua o código...]
    End with
End Sub

O legal que achei é que posso utilizar qualquer função com ela, bastando fazer as devidas adequações.

editar assinalar como ofensivo Excluir Link mais

Comentários

1

Pra ajudar na chamada de funções do Calc e do suplemento

https://help.libreoffice.org/7.2/pt-B...

imagem do gravatar de OlivierOlivier ( 2021-04-30 15:13:52 +0200 )editar

Obrigado @Olivier, vou incluir o material na minha coleção.

imagem do gravatar de WBastosWBastos ( 2021-04-30 16:01:59 +0200 )editar
1

respondidas 2021-04-27 18:21:49 +0200

imagem do gravatar de Schiavinatto

updated 2021-04-28 01:55:39 +0200

Ola @WBastos, segue uma sugestão de macro: UltLin é a variável com a ultima linha com informação na coluna antes de uma vazia. ( portanto a coluna não pode ter células vazia intercaladas com as células com dados )

REM  *****  BASIC  *****
Option VbaSupport 1

Sub UltimaLinha
    GoToLocal "Plan1.B1"
    Execute "GoDownToEndOfData", 1
'   MsgBox ActiveCell.Row
    UltLin = ActiveCell.Row
End Sub


'                        ___
'                       (o o)
'-------------------oo0--(_)--0oo----------------
'|        |        |  SubMacros  |         |
'------------------------------------------------
'     |         |          |           |         | 
'------------------------------------------------

Sub Execute ( oQue$, Optional nQtd% )
Dim Exec(1) as new com.sun.star.beans.PropertyValue
Exec(0).Name = "By" : Exec(0).Value = nQtd
Exec(1).Name = "Sel" : Exec(1).Value = false
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController _
.Frame, ".uno:" & oQue & "", "", 0, Exec())
End Sub

' Ir Para
Sub GoToLocal ( xLocal$ )
dim Loc(0) as new com.sun.star.beans.PropertyValue
Loc(0).Name = "ToPoint" : Loc(0).Value = xLocal
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame _
, ".uno:GoToCell", "", 0, Loc())
End Sub

Sub AddressCelula 'VBA
msgbox ActiveCell.Address
msgbox ActiveCell.Column
msgbox ActiveCell.Row
End Sub
editar assinalar como ofensivo Excluir Link mais
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2021-04-23 00:58:35 +0200

Lidas: 26 vezes

Última atualização: Apr 29