Pergunte aqui
0

Como converter código VBA do Excel para o Calc?

perguntadas 2021-04-23 03:55:40 +0200

imagem do gravatar de pcmac

updated 2021-05-01 17:09:01 +0200

imagem do gravatar de Schiavinatto

Tenho uma planilha do Excel na qual usando o código abaixo roda perfeitamente. A função dela é associar quatro botões que me permitem avançar ou retroceder o mês ou o ano de uma data. Abrindo essa planilha no Calc não funciona. Pesquisei como contornar, mas nenhuma dica deu certo. Não conheço VBA. Esse código achei na internet, que serviu pra mim. Como converter essas rotinas pro Calc?

Sub Avancar_o_Mês() Dim data1 As Range

Set data1 = Range("C2")

data1 = VBA.DateAdd("m", 1, data1)

End Sub

Sub Retroceder_o_Mês() Dim data2 As Range

Set data2 = Range("C2")

data2 = VBA.DateAdd("m", -1, data2)

End Sub

Sub Avancar_o_Ano() Dim data3 As Range

Set data3 = Range("C2")

data3 = VBA.DateAdd("yyyy", 1, data3)

End Sub

Sub Retroceder_o_Ano() Dim data4 As Range

Set data4 = Range("C2")

data4 = VBA.DateAdd("yyyy", -1, data4)

End Sub Descrição da imagemC:\fakepath\Calendário.ods

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

@pcmac com a inclusão de Option VbaSupport 1 no Module e a retirada de VBA. da macro, a data é alterada porém ainda gera erro !!!!!!!!!!!!!!!!!!!!

Option VbaSupport 1

Sub Avancar_o_Mês() Dim data1 As Range
Set data1 = Range("C2")
data1 = DateAdd("m", 1, data1)
End Sub

Sub Retroceder_o_Mês() Dim data2 As Range
Set data2 = Range("C2")
data2 = DateAdd("m", -1, data2)
End Sub

Sub Avancar_o_Ano() Dim data3 As Range
Set data3 = Range("C2")
data3 = DateAdd("yyyy", 1, data3)
End Sub

Sub Retroceder_o_Ano() Dim data4 As Range
Set data4 = Range("C2")
data4 = DateAdd("yyyy", -1, data4)
End Sub

Descrição da imagem

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-23 05:02:45 +0200 )editar

2 Respostas

0

respondidas 2021-04-23 04:52:26 +0200

imagem do gravatar de Schiavinatto

updated 2021-04-24 03:42:17 +0200

Ola @pcmac, não sei como esta usando, mas segue uma sugestão sem Macro, usando Contador e uma data base.

Descrição da imagem

Arquivo do teste ( ERRO )

Complemento

Segue arquivo teste alterado conforme seu arquivo.

As macros não são bonitas, mas estão funcionando.

Vide Observações na planilha.

Arquivo teste 2 ( ERRO )

Complemento 2

Arquivo teste 3

-----------------------------------------------------------------------------

ATENÇÂO:: Para dar mais detalhes a sua pergunta, use Descrição da imagem na pergunta ou Descrição da imagem abaixo. Não use Adicionar resposta para comentário. Grato.

Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.

editar assinalar como ofensivo Excluir Link mais

Comentários

1

Grato pela atenção. Estudando sua solução consegui resolver aqui. O uso é parecido com o botão de rotação do Excel. Muito agradecido.

imagem do gravatar de pcmacpcmac ( 2021-04-23 16:58:14 +0200 )editar

Tem exemplos de calendários aqui: https://wiki.documentfoundation.org/P... e tenho esse projeto incompleto com vários modelos.

Para enviar arquivo, edite sua pergunta e com o ícone clique anexa o arquivo e o ícone quadradinho é para imagens.

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-23 19:12:18 +0200 )editar

Estava vendo melhor sua solução e ainda não é o ideal. Porque no calendário eu tenho a opção de inserir a data na célula C2 e dessa maneira que enviou ali ficou uma fórmula, então se digitar a data perde a fórmula. Editei aqui, mas não identifiquei qual o ícone para enviar arquivo. Editando de novo (rs). Bem interessante seu projeto. Parabéns. Editando mais uma vez (eita). Percebi que pra enviar arquivo a mensagem a ser editada é a primeira. Enviei o arquivo convertido pro ODS. Não consegui enviar o arquivo original pra Excel, porque não é permitida a extensão xslm. A parte abaixo do calendário, onde aparece o nome dos feriados, ainda precisa ser corrigida a lógica. Por enquanto o problema são os botões.

imagem do gravatar de pcmacpcmac ( 2021-04-23 23:37:52 +0200 )editar

Vide Complemento em minha Resposta acima....

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-24 01:33:53 +0200 )editar

Melhorou, mas ainda há erro. Repare que se retroceder alguns meses dá erro no calendário e na célula onde fica a data digitada.

imagem do gravatar de pcmacpcmac ( 2021-04-24 02:07:41 +0200 )editar

Realmente, esqueci que é data.

Vide Complemento 2 em minha Resposta acima....

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-24 03:37:51 +0200 )editar

Melhorou, mas sempre que digito a data dá erro de inserção na data.

imagem do gravatar de pcmacpcmac ( 2021-04-24 04:46:22 +0200 )editar

Delete a validação e refaça,

Deve ser algum espírito maldoso na planilha .

Arquivo com validação refeita : C:\fakepath\305644.ods

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-24 15:25:27 +0200 )editar

Grato. Não percebi diferença entre essas duas últimas que enviou. Também não entendi "refazer a validação". Ainda persiste o erro na inserção de data. Esse espírito maldoso persiste.

imagem do gravatar de pcmacpcmac ( 2021-04-24 23:55:37 +0200 )editar

A diferença foram alterações nas Macros.

Altere a Validação para "Todos os valores" e deixe a Ajuda.

Descrição da imagem

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-25 00:12:46 +0200 )editar
0

respondidas 2021-04-24 04:19:36 +0200

imagem do gravatar de WBastos

updated 2021-04-24 21:05:41 +0200

@pcmac , não sei se te serve, mas segue uma alternativa utilizando o campo de data que adaptei utilizando uma das macros disponibilizadas pelo @Schiavinatto.

Com o contador habilitado é possível navegar pelos dias, meses e anos.

'===================
Sub DataIn (oEvento)
'===================
oDoc = ThisComponent
oPlan = oDoc.Sheets(0)
oCel = oPlan.getCellRangeByName ( "C2" )
oCampoData = oEvento.Source.Model

    With oCampoData.Date
        sData = oCampoData.Text
    End With
    oCel.String = sData 
End Sub

Segue planilha com alterações no código e correção do campo de entrada manual de data.

Link do Arquivo: Planilha Teste

editar assinalar como ofensivo Excluir Link mais

Comentários

Interessante, mas foi feita usando uma anterior que apresentava erro. Se for clicando para alterar os meses dá erro. Grato.

imagem do gravatar de pcmacpcmac ( 2021-04-24 04:48:27 +0200 )editar

Acredito que se você colocar um contador numa célula auxiliar e depois usar o valor na fórmula, pode ser que dê certo, mas depois olho seu código com tempo

imagem do gravatar de WBastosWBastos ( 2021-04-24 04:52:48 +0200 )editar

Se você inspecionar a variável DData (tecla F7 e debugar com F8), verá que na virada de ano a data passará para **01/13/2022**, ou seja, tem que definir a contagem do mês até 12 e depois voltar para o mês 01.

imagem do gravatar de WBastosWBastos ( 2021-04-24 12:13:57 +0200 )editar

Testei aqui e deu certo para o avanço do mês, mas tem que adaptar para os demais campos:

Sub MesMais
    oDoc = ThisComponent
    oSel = oDoc.getCurrentSelection()   
    GoToLocal "DDia"
    oSel = oDoc.getCurrentSelection()
    Dia = oSel.getString()
    GoToLocal "MMes"
    oSel = oDoc.getCurrentSelection()
    Mes = oSel.getString()
    GoToLocal "AAno"
    oSel = oDoc.getCurrentSelection()
    Ano = oSel.getString()
    DData = Dia &"/"& Mes + 1 &"/"& Ano
        **If Mes > 11 Then 
            DData = Dia &"/"& 01 &"/"& Ano
        Else
            DData = Dia &"/"& Mes + 1 &"/"& Ano + 1
        End If**   
    oDoc.CurrentController.ActiveSheet.GetCellRangeByName( "C2" ).String = DData 
    GoToLocal "B2"
End Sub
imagem do gravatar de WBastosWBastos ( 2021-04-24 13:18:32 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2021-04-23 03:55:40 +0200

Lidas: 36 vezes

Última atualização: Apr 24